<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-12T00:18:23.323480" rpa="false" schemaversion="5">
<suite id="s1" name="controller-rest-cars-perf.txt">
<suite id="s1-s1" name="010 Crud Mdsal Perf" source="/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/suites/controller/OneNode_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-12T00:18:23.944498" 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-12T00:18:23.940394" elapsed="0.004174"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-12T00:18:23.939586" elapsed="0.005069"/>
</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-12T00:18:23.949769" 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-12T00:18:23.946224" elapsed="0.003580"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-12T00:18:23.950062" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:23.949921" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:23.949886" elapsed="0.000280"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.950772" 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-12T00:18:23.950332" elapsed="0.000489"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.951334" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:18:23.950985" elapsed="0.000384"/>
</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-12T00:18:23.951951" elapsed="0.000333"/>
</kw>
<msg time="2026-04-12T00:18:23.952399" level="INFO">${status} = PASS</msg>
<msg time="2026-04-12T00:18:23.952448" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:18:23.951551" elapsed="0.000921"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.953042" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:23.952636" elapsed="0.000434"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.954661" 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-12T00:18:23.954369" elapsed="0.000322"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.955097" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:23.954835" elapsed="0.000289"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.955899" 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-12T00:18:23.955292" elapsed="0.000637"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.958412" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:23.958216" elapsed="0.000273"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.955992" elapsed="0.002529"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.959097" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:23.958680" elapsed="0.000479"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.959763" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:23.959318" elapsed="0.000489"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.960372" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:23.959960" elapsed="0.000456"/>
</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-12T00:18:23.953879" elapsed="0.006599"/>
</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-12T00:18:23.945826" elapsed="0.014710"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.960723" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:23.960604" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:23.960584" elapsed="0.000209"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.963843" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:23.963453" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.964424" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:23.964109" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:23.964498" elapsed="0.000044"/>
</return>
<msg time="2026-04-12T00:18:23.964675" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:23.963096" elapsed="0.001604"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.965041" elapsed="0.000035"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:23.964873" elapsed="0.000270"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.964754" elapsed="0.000425"/>
</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-12T00:18:23.961018" elapsed="0.004219"/>
</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-12T00:18:23.965382" elapsed="0.000212"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.965900" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:23.965772" elapsed="0.000192"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.965646" elapsed="0.000345"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-12T00:18:23.945065" elapsed="0.020982"/>
</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-12T00:18:23.968571" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:23.968448" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:23.968428" elapsed="0.000214"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.973098" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:23.972982" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:23.972961" elapsed="0.000236"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.974123" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:23.973737" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:23.974671" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:23.974332" elapsed="0.000369"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:23.974752" elapsed="0.000035"/>
</return>
<msg time="2026-04-12T00:18:23.974932" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:23.973413" elapsed="0.001545"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.975333" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.975577" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:23.975440" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:23.975422" elapsed="0.000231"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:23.975195" elapsed="0.000482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.975012" elapsed="0.000691"/>
</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-12T00:18:23.972657" elapsed="0.003102"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-12T00:18:23.966651" elapsed="0.009163"/>
</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-12T00:18:23.966204" elapsed="0.009651"/>
</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-12T00:18:23.939224" elapsed="0.036686"/>
</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-12T00:18:23.978267" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:23.978138" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:23.978104" elapsed="0.000239"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-12T00:18:23.978877" level="FAIL">Dictionary does not contain key '1'.</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="FAIL" start="2026-04-12T00:18:23.978585" elapsed="0.000500">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.979350" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-12T00:18:23.979523" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-12T00:18:23.979691" elapsed="0.000020"/>
</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-12T00:18:23.979918" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:23.979786" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:23.979767" elapsed="0.000227"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.980122" elapsed="0.000035"/>
</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-12T00:18:23.980360" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:23.980226" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:23.980206" elapsed="0.000230"/>
</if>
<return>
<value>${message_wait}</value>
<status status="NOT RUN" start="2026-04-12T00:18:23.980471" elapsed="0.000015"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<msg time="2026-04-12T00:18:23.985563" level="FAIL">Variable '${current_connection_index}' not found.</msg>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="FAIL" start="2026-04-12T00:18:23.981770" elapsed="0.003831">Variable '${current_connection_index}' not found.</status>
</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="FAIL" start="2026-04-12T00:18:23.981248" elapsed="0.004419">Variable '${current_connection_index}' not found.</status>
</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="FAIL" start="2026-04-12T00:18:23.976262" elapsed="0.009498">Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.985918" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.986092" elapsed="0.000020"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.986308" elapsed="0.000023"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/suites/controller/OneNode_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.986466" elapsed="0.000020"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.986627" elapsed="0.000019"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>session</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-12T00:18:23.986793" elapsed="0.000020"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-12T00:18:23.938769" elapsed="0.048207">Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</kw>
<test id="s1-s1-t1" name="Add Cars" line="54">
<doc>Request to add 10000 cars (timeout in 11m).</doc>
<status status="FAIL" start="2026-04-12T00:18:23.987141" elapsed="0.000490">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t2" name="Verify Cars" line="61">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-12T00:18:23.987981" elapsed="0.000480">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t3" name="Add People" line="69">
<doc>Request to add 10000 people (timeout in 11m).</doc>
<status status="FAIL" start="2026-04-12T00:18:23.989056" elapsed="0.000376">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t4" name="Verify People" line="74">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-12T00:18:23.989665" elapsed="0.000297">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t5" name="Purchase Cars" line="82">
<doc>Request to purchase 10000 cars (timeout in 11m).</doc>
<status status="FAIL" start="2026-04-12T00:18:23.990259" elapsed="0.000442">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t6" name="Verify Purchases" line="87">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-12T00:18:23.991023" elapsed="0.000368">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t7" name="Delete Cars" line="93">
<doc>Remove cars from the datastore</doc>
<status status="FAIL" start="2026-04-12T00:18:23.991651" elapsed="0.000333">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t8" name="Delete People" line="99">
<doc>Remove people from the datastore</doc>
<status status="FAIL" start="2026-04-12T00:18:23.992300" elapsed="0.000425">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<test id="s1-s1-t9" name="Delete CarPeople" line="105">
<doc>Remove car-people entries from the datastore</doc>
<status status="FAIL" start="2026-04-12T00:18:23.993023" elapsed="0.000377">Parent suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-12T00:18:23.994212" elapsed="0.000103"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-12T00:18:23.994528" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-12T00:18:23.994451" elapsed="0.000128"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-12T00:18:23.993986" elapsed="0.000644"/>
</kw>
<doc>Test for measuring execution time of MD-SAL DataStore operations.

Copyright (c) 2015-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
operations on people, car and car-people DataStore test models.
(see the https://wiki.opendaylight.org/view/MD-SAL_Clustering_Test_Plan)

TODO: Decide whether keyword names should contain spaces or underscores.</doc>
<status status="FAIL" start="2026-04-12T00:18:23.364454" elapsed="0.630207">Suite setup failed:
Dictionary does not contain key '1'.

Also keyword teardown failed:
Variable '${current_connection_index}' not found.</status>
</suite>
<suite id="s1-s2" name="Noloss Rate 1Node" source="/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/suites/controller/dom_notification_broker/noloss_rate_1node.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-12T00:18:24.129402" 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-12T00:18:24.125246" elapsed="0.004209"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-12T00:18:24.125000" elapsed="0.004523"/>
</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-12T00:18:24.134522" 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-12T00:18:24.130614" elapsed="0.003940"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-12T00:18:24.134771" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.134649" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.134624" elapsed="0.000219"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.135366" 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-12T00:18:24.134996" elapsed="0.000413"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.135884" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:18:24.135569" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-12T00:18:24.136433" elapsed="0.000286"/>
</kw>
<msg time="2026-04-12T00:18:24.136824" level="INFO">${status} = PASS</msg>
<msg time="2026-04-12T00:18:24.136872" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:18:24.136072" elapsed="0.000823"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.137455" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.137061" elapsed="0.000422"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.138634" 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-12T00:18:24.138323" elapsed="0.000339"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.139066" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.138810" elapsed="0.000283"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.139562" 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-12T00:18:24.139267" elapsed="0.000321"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.142043" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.141855" elapsed="0.000261"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.139647" elapsed="0.002515"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.142766" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.142325" elapsed="0.000485"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.143417" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.142970" elapsed="0.000491"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.143990" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.143621" elapsed="0.000412"/>
</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-12T00:18:24.137856" elapsed="0.006245"/>
</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-12T00:18:24.130247" elapsed="0.013931"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.144361" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.144245" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.144226" elapsed="0.000203"/>
</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-12T00:18:24.147835" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.147445" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.148333" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.148021" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:24.148405" elapsed="0.000036"/>
</return>
<msg time="2026-04-12T00:18:24.148570" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.147073" elapsed="0.001522"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.148941" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.148767" elapsed="0.000234"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.148650" elapsed="0.000378"/>
</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-12T00:18:24.144644" elapsed="0.004438"/>
</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-12T00:18:24.149254" elapsed="0.000214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.149780" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.149645" elapsed="0.000200"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.149521" elapsed="0.000349"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-12T00:18:24.129799" elapsed="0.020124"/>
</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-12T00:18:24.152575" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.152462" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.152444" elapsed="0.000199"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.157403" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.157296" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.157278" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.158437" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.158006" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.158938" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.158630" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:24.159028" elapsed="0.000044"/>
</return>
<msg time="2026-04-12T00:18:24.159239" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.157686" elapsed="0.001579"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.159625" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.159905" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.159760" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.159741" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.159484" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.159323" elapsed="0.000724"/>
</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-12T00:18:24.156993" elapsed="0.003110"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-12T00:18:24.150551" elapsed="0.009626"/>
</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-12T00:18:24.150070" elapsed="0.010151"/>
</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-12T00:18:24.124624" elapsed="0.035646"/>
</kw>
<test id="s1-s2-t1" name="Notifications_rate_5k" line="34">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-12T00:18:24.163497" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-12T00:18:24.163219" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.164849" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.164738" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.164719" 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-12T00:18:24.169757" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.169650" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.169631" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.170857" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.170473" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.171353" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.171043" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:24.171424" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.171578" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.170070" elapsed="0.001533"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.171956" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.172267" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.172089" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.172070" elapsed="0.000276"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.171805" elapsed="0.000563"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.171655" elapsed="0.000737"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:18:24.169287" elapsed="0.003157"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-12T00:18:24.164369" elapsed="0.008127"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:18:24.163906" elapsed="0.008634"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-12T00:18:24.160898" elapsed="0.011693"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.179440" level="INFO">Overall requested rate: 5000, test duration: 300 seconds.</msg>
<arg>Overall requested rate: ${total_notification_rate}, test duration: ${test_duration_in_seconds} seconds.</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.179122" elapsed="0.000365"/>
</kw>
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.180576" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.180788" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.180348" elapsed="0.000465"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.185694" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.181009" elapsed="0.004759"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.186221" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.186434" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.185960" elapsed="0.000500"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.191152" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.186625" elapsed="0.004575"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.180028" elapsed="0.011233"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-12T00:18:24.179689" elapsed="0.011617"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.193279" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.191452" elapsed="0.001854"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.194111" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${count}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.193779" elapsed="0.000383"/>
</kw>
<kw name="Subscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.198726" 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-12T00:18:24.198425" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-12T00:18:24.198801" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:18:24.198954" 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-12T00:18:24.198062" elapsed="0.000917"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.199546" level="INFO">&amp;{mapping} = { ID=working-pair-1 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.199154" elapsed="0.000420"/>
</kw>
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Post_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-12T00:18:24.233359" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.232914" elapsed="0.000474"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.234383" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.233903" elapsed="0.000573">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.234574" 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-12T00:18:24.233551" elapsed="0.001048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.235180" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.234773" elapsed="0.000436"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.235529" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.235696" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.235373" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.236147" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.235887" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.237403" level="INFO">mapping: {'ID': 'working-pair-1'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.236873" elapsed="0.000576"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.238020" 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-12T00:18:24.237611" elapsed="0.000435"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.239100" level="INFO">${value} = working-pair-1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-12T00:18:24.238455" elapsed="0.000706"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.240918" level="INFO">${encoded} = working-pair-1</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.240449" elapsed="0.000510"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-12T00:18:24.241041" elapsed="0.000099"/>
</return>
<msg time="2026-04-12T00:18:24.241416" level="INFO">${encoded_value} = working-pair-1</msg>
<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="PASS" start="2026-04-12T00:18:24.239602" elapsed="0.001856"/>
</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="PASS" start="2026-04-12T00:18:24.241684" elapsed="0.000642"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-12T00:18:24.238292" elapsed="0.004136"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.238094" elapsed="0.004372"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.242513" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.242678" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-12T00:18:24.236550" elapsed="0.006154"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.236263" elapsed="0.006474"/>
</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-12T00:18:24.242912" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.242762" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.236243" elapsed="0.006754"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.243631" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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-12T00:18:24.243174" elapsed="0.000485"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.243709" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.232293" elapsed="0.011543"/>
</kw>
<msg time="2026-04-12T00:18:24.243892" 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-12T00:18:24.219707" elapsed="0.024236"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.260485" elapsed="0.000033"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.273049" elapsed="0.000028"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.285435" 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-12T00:18:24.285632" 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-12T00:18:24.285807" 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-12T00:18:24.286198" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.286041" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.286025" elapsed="0.000255"/>
</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-12T00:18:24.286424" 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-12T00:18:24.286636" 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-12T00:18:24.286800" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.285994" elapsed="0.000859"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.285886" elapsed="0.000994"/>
</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-12T00:18:24.287022" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.287097" elapsed="0.000017"/>
</return>
<msg time="2026-04-12T00:18:24.287234" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.215411" elapsed="0.071849"/>
</kw>
<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-12T00:18:24.312239" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml</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-12T00:18:24.311786" elapsed="0.000482"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.313100" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' 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-12T00:18:24.312760" elapsed="0.000459">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.313318" 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-12T00:18:24.312430" elapsed="0.000913"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.313888" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml</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-12T00:18:24.313504" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.314234" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.314402" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.314073" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.314870" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.314592" elapsed="0.000324"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-12T00:18:24.315310" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.314986" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.315865" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.315538" elapsed="0.000355"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.315396" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.314966" elapsed="0.000983"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.322669" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</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-12T00:18:24.316091" elapsed="0.006612"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.322767" elapsed="0.000035"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.311146" elapsed="0.011776"/>
</kw>
<msg time="2026-04-12T00:18:24.323027" 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-12T00:18:24.298563" elapsed="0.024521"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.336220" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.348815" elapsed="0.000033"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.361046" elapsed="0.000029"/>
</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-12T00:18:24.361270" 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-12T00:18:24.361446" 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-12T00:18:24.361820" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.361679" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.361663" elapsed="0.000235"/>
</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-12T00:18:24.362058" elapsed="0.000030"/>
</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-12T00:18:24.362300" elapsed="0.000026"/>
</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-12T00:18:24.362517" elapsed="0.000026"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.361632" elapsed="0.000952"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.361527" elapsed="0.001090"/>
</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-12T00:18:24.362769" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.362845" elapsed="0.000016"/>
</return>
<msg time="2026-04-12T00:18:24.362967" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>name_prefix=post_</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.297566" elapsed="0.065429"/>
</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-12T00:18:24.364355" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.364065" elapsed="0.000369">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.364530" 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-12T00:18:24.363716" elapsed="0.000839"/>
</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-12T00:18:24.364923" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.364662" elapsed="0.000320"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.365494" 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-12T00:18:24.365197" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.365007" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.364642" elapsed="0.000935"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.367917" 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-12T00:18:24.365725" elapsed="0.002218"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-12T00:18:24.367995" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.368168" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-12T00:18:24.363384" elapsed="0.004810"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.369766" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.369511" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.370264" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.369961" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.370789" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.370460" elapsed="0.000378"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.371279" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.371002" elapsed="0.000321"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-12T00:18:24.372146" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-12T00:18:24.371916" elapsed="0.000259"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-12T00:18:24.372504" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-12T00:18:24.372325" elapsed="0.000205"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.372677" elapsed="0.000346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.373453" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.373200" elapsed="0.000297"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-12T00:18:24.373540" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.373696" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-12T00:18:24.371518" elapsed="0.002203"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-12T00:18:24.376393" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.376081" elapsed="0.000959">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:18:24.373791" elapsed="0.003351">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.377323" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.377176" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-04-12T00:18:24.373773" elapsed="0.003639">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-12T00:18:24.377775" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.377908" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.377872" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.377855" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.378112" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.378195" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.368519" elapsed="0.009788">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.378425" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.204209" elapsed="0.174321">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.378846" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.378645" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.378628" elapsed="0.000312"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.378973" elapsed="0.000015"/>
</return>
<arg>${SUBSCRIBE_YNL_DIR}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.199835" elapsed="0.179237">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${count}</arg>
<doc>Subscribe listener for the notifications with identifier ${gid}.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.197599" elapsed="0.181596">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<var name="${suffix}">5000</var>
<status status="FAIL" start="2026-04-12T00:18:24.193621" elapsed="0.185636">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</iter>
<var>${suffix}</var>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<value>${total_notification_rate}+1</value>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<status status="FAIL" start="2026-04-12T00:18:24.193360" elapsed="0.185953">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.379480" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<arg>${test_duration_in_seconds}</arg>
<arg>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Start publishing notifications by invoking publish-notifications rpc.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.379810" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.379607" elapsed="0.000270"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.379553" elapsed="0.000350"/>
</for>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Notifications_Active_Status</arg>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.380096" elapsed="0.000023"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${validator}</var>
<arg>Check_Notifications_Active_Status</arg>
<arg>data_holder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.380331" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${validation_timeout_in_seconds}</var>
<arg>${test_duration_in_seconds}+${DNB_CHECK_TOLERANCE_IN_SECONDS}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.380504" elapsed="0.000019"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<arg>timeout=${validation_timeout_in_seconds}s</arg>
<arg>period=${DNB_CHECK_PERIOD_IN_SECONDS}s</arg>
<arg>getter=${getter}</arg>
<arg>stateless_validator=${validator}</arg>
<doc>Repeatedly run getter and plug its output to validator. If both pass, return validator message.
If getter fails, fail. If validator fails, repeat in WUKS fashion (fail when timeout is exceeded).
FIXME: Cover this keyword in WaitUtilTest.robot</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.380809" elapsed="0.000024"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.380985" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_pair_rate}</var>
<arg>0.9*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.381176" elapsed="0.000026"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_pair_rate}</var>
<arg>1.1*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.381353" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<var>${all_not}</var>
<var>${id_not}</var>
<var>${err_not}</var>
<var>${local_number}</var>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Unsubscribe listener for the ${gid} identifier. Return statistics of the publishing process.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.384965" elapsed="0.000026"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.385166" elapsed="0.000022"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.385330" elapsed="0.000020"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${id_not}</arg>
<arg>${local_number}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.385494" elapsed="0.000026"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${rate}</var>
<arg>${local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.385661" elapsed="0.000051"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &gt; ${low_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.385860" elapsed="0.000020"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &lt; ${high_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386017" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${sum_local_number}+${local_number}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386192" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.381512" elapsed="0.004734"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.381422" elapsed="0.004851"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<var>${final_rate}</var>
<arg>${sum_local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386423" elapsed="0.000025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_final_rate}</var>
<arg>0.9*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386595" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_final_rate}</var>
<arg>1.1*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386789" elapsed="0.000021"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &gt; ${low_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.386955" elapsed="0.000020"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &lt; ${high_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.387113" elapsed="0.000043"/>
</kw>
<arg>${5000}</arg>
<arg>${TC_DURATION_IN_SECONDS}</arg>
<doc>Test case template. Input parameter ${total_notification_rate} determines, how many publisher/subscriber
pais take part in the test case. For every 5000 one pair is created.
The test case itself firstly subscribe listeners, then run publishers and at the end unsubscribe listeners
and check achieved rates.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.177090" elapsed="0.210159">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.388553" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.388164" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.388145" elapsed="0.000493"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:18:24.388780" elapsed="0.000320"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.394270" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.393776" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-12T00:18:24.394534" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.394386" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.394366" elapsed="0.000263"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.395091" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.394788" elapsed="0.000330"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.395629" level="INFO">${reference} = controller_rest_cars_perf_txt_Noloss_Rate_1Node_Notifications_rate_5k</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.395296" elapsed="0.000360"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-12T00:18:24.395988" level="INFO">${reference} = controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.395811" elapsed="0.000203"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.396560" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.396196" elapsed="0.000391"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.397066" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.396754" elapsed="0.000340"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.397711" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.397261" elapsed="0.000501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.398272" level="INFO">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.397951" elapsed="0.000370"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.393474" elapsed="0.004903"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.387935" elapsed="0.010491"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.387577" elapsed="0.010890"/>
</kw>
<tag>critical</tag>
<status status="FAIL" start="2026-04-12T00:18:24.160349" elapsed="0.238183">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_5k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</status>
</test>
<test id="s1-s2-t2" name="Notifications_rate_20k" line="36">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-12T00:18:24.401764" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-12T00:18:24.401506" elapsed="0.000518"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.403033" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.402923" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.402904" 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-12T00:18:24.407958" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.407852" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.407835" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.409019" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.408641" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.409505" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.409217" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:24.409575" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.409730" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.408262" elapsed="0.001493"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.410095" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.410387" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.410211" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.410194" elapsed="0.000275"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.409958" elapsed="0.000534"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.409807" elapsed="0.000709"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:18:24.407496" elapsed="0.003071"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-12T00:18:24.402632" elapsed="0.007988"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:18:24.402191" elapsed="0.008473"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-12T00:18:24.399405" elapsed="0.011310"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.417766" level="INFO">Overall requested rate: 20000, test duration: 300 seconds.</msg>
<arg>Overall requested rate: ${total_notification_rate}, test duration: ${test_duration_in_seconds} seconds.</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.417470" elapsed="0.000343"/>
</kw>
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.418896" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:18:24.419107" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.418671" elapsed="0.000508"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.419734" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.419346" elapsed="0.000430"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.420202" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.420412" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.419954" elapsed="0.000484"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.420990" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.420599" elapsed="0.000434"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.418388" elapsed="0.002702"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-12T00:18:24.418036" elapsed="0.003121"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.423189" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.421303" elapsed="0.001914"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.423974" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${count}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.423653" elapsed="0.000348"/>
</kw>
<kw name="Subscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.428699" 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-12T00:18:24.428394" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-12T00:18:24.428773" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.428923" 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-12T00:18:24.428035" elapsed="0.000913"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.429514" level="INFO">&amp;{mapping} = { ID=working-pair-1 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.429107" elapsed="0.000436"/>
</kw>
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Post_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-12T00:18:24.464214" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.463823" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.465191" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.464809" elapsed="0.000473">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.465378" 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-12T00:18:24.464402" elapsed="0.001000"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.465968" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.465582" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.466340" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.466486" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.466171" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.466910" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.466662" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.468099" level="INFO">mapping: {'ID': 'working-pair-1'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.467644" elapsed="0.000515"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.468722" 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-12T00:18:24.468315" elapsed="0.000432"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.469866" level="INFO">${value} = working-pair-1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-12T00:18:24.469162" elapsed="0.000746"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.471666" level="INFO">${encoded} = working-pair-1</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.471243" elapsed="0.000459"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-12T00:18:24.471781" elapsed="0.000075"/>
</return>
<msg time="2026-04-12T00:18:24.472120" level="INFO">${encoded_value} = working-pair-1</msg>
<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="PASS" start="2026-04-12T00:18:24.470424" elapsed="0.001754"/>
</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="PASS" start="2026-04-12T00:18:24.472439" elapsed="0.000544"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-12T00:18:24.468970" elapsed="0.004112"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.468798" elapsed="0.004323"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.473196" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.473358" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-12T00:18:24.467331" elapsed="0.006052"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.467029" elapsed="0.006451"/>
</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-12T00:18:24.473673" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.473518" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.467008" elapsed="0.006741"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.474375" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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-12T00:18:24.473887" elapsed="0.000516"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.474451" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.463213" elapsed="0.011360"/>
</kw>
<msg time="2026-04-12T00:18:24.474626" 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-12T00:18:24.450684" elapsed="0.023990"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.486986" elapsed="0.000029"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.499708" elapsed="0.000028"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.511845" elapsed="0.000027"/>
</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-12T00:18:24.512036" 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-12T00:18:24.512219" 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-12T00:18:24.512586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.512441" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.512426" elapsed="0.000238"/>
</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-12T00:18:24.512834" 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-12T00:18:24.513023" 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-12T00:18:24.513208" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.512397" elapsed="0.000866"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.512296" elapsed="0.000992"/>
</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-12T00:18:24.513430" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.513505" elapsed="0.000015"/>
</return>
<msg time="2026-04-12T00:18:24.513616" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.446512" elapsed="0.067130"/>
</kw>
<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-12T00:18:24.537913" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml</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-12T00:18:24.537539" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.538737" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' 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-12T00:18:24.538441" elapsed="0.000368">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.538902" 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-12T00:18:24.538098" elapsed="0.000829"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.539495" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml</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-12T00:18:24.539087" elapsed="0.000436"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.539811" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.539938" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.539678" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.540374" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.540115" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-12T00:18:24.540807" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.540487" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.541345" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.541032" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.540891" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.540468" elapsed="0.000960"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.542119" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</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-12T00:18:24.541572" elapsed="0.000595"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.542224" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.536906" elapsed="0.005446"/>
</kw>
<msg time="2026-04-12T00:18:24.542438" 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-12T00:18:24.524556" elapsed="0.017931"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.554835" elapsed="0.000028"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.567169" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.579277" 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-12T00:18:24.579469" 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-12T00:18:24.579640" 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-12T00:18:24.580023" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.579864" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.579848" elapsed="0.000262"/>
</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-12T00:18:24.580272" 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-12T00:18:24.580436" 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-12T00:18:24.580597" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.579818" elapsed="0.000830"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.579715" elapsed="0.000959"/>
</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-12T00:18:24.580888" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.580966" elapsed="0.000016"/>
</return>
<msg time="2026-04-12T00:18:24.581086" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>name_prefix=post_</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.523680" elapsed="0.057434"/>
</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-12T00:18:24.582416" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.582118" elapsed="0.000376">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.582593" 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-12T00:18:24.581779" elapsed="0.000840"/>
</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-12T00:18:24.583024" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.582773" elapsed="0.000308"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.583597" 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-12T00:18:24.583297" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.583106" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.582752" elapsed="0.000930"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.586051" 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-12T00:18:24.583832" elapsed="0.002246"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-12T00:18:24.586147" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:18:24.586316" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-12T00:18:24.581457" elapsed="0.004885"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.587862" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.587610" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.588351" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.588084" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.588790" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.588545" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.589242" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.588983" elapsed="0.000303"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-12T00:18:24.590096" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-12T00:18:24.589894" elapsed="0.000229"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-12T00:18:24.590469" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-12T00:18:24.590289" elapsed="0.000207"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.590641" elapsed="0.000209"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.591268" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.591002" elapsed="0.000311"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-12T00:18:24.591355" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.591511" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-12T00:18:24.589483" elapsed="0.002053"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-12T00:18:24.594217" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.593868" elapsed="0.000753">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:18:24.591608" elapsed="0.003098">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.594888" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.594738" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-04-12T00:18:24.591590" elapsed="0.003387">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-12T00:18:24.595358" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.595497" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.595459" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.595442" 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>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.595700" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.595767" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.586665" elapsed="0.009243">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.596025" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.435478" elapsed="0.160674">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.596459" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.596270" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.596252" elapsed="0.000300"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.596591" elapsed="0.000020"/>
</return>
<arg>${SUBSCRIBE_YNL_DIR}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.429790" elapsed="0.166911">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${count}</arg>
<doc>Subscribe listener for the notifications with identifier ${gid}.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.427573" elapsed="0.169226">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<var name="${suffix}">5000</var>
<status status="FAIL" start="2026-04-12T00:18:24.423520" elapsed="0.173337">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</iter>
<var>${suffix}</var>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<value>${total_notification_rate}+1</value>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<status status="FAIL" start="2026-04-12T00:18:24.423271" elapsed="0.173641">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.597079" elapsed="0.000026"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<arg>${test_duration_in_seconds}</arg>
<arg>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Start publishing notifications by invoking publish-notifications rpc.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.597430" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.597242" elapsed="0.000254"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.597187" elapsed="0.000335"/>
</for>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Notifications_Active_Status</arg>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.597715" elapsed="0.000024"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${validator}</var>
<arg>Check_Notifications_Active_Status</arg>
<arg>data_holder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.597933" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${validation_timeout_in_seconds}</var>
<arg>${test_duration_in_seconds}+${DNB_CHECK_TOLERANCE_IN_SECONDS}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.598105" elapsed="0.000035"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<arg>timeout=${validation_timeout_in_seconds}s</arg>
<arg>period=${DNB_CHECK_PERIOD_IN_SECONDS}s</arg>
<arg>getter=${getter}</arg>
<arg>stateless_validator=${validator}</arg>
<doc>Repeatedly run getter and plug its output to validator. If both pass, return validator message.
If getter fails, fail. If validator fails, repeat in WUKS fashion (fail when timeout is exceeded).
FIXME: Cover this keyword in WaitUtilTest.robot</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.598425" elapsed="0.000024"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.598604" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_pair_rate}</var>
<arg>0.9*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.598770" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_pair_rate}</var>
<arg>1.1*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.598933" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<var>${all_not}</var>
<var>${id_not}</var>
<var>${err_not}</var>
<var>${local_number}</var>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Unsubscribe listener for the ${gid} identifier. Return statistics of the publishing process.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.602578" elapsed="0.000028"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.602771" elapsed="0.000021"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.602933" elapsed="0.000021"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${id_not}</arg>
<arg>${local_number}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.603094" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${rate}</var>
<arg>${local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.603274" elapsed="0.000107"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &gt; ${low_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.603539" elapsed="0.000021"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &lt; ${high_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.603709" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${sum_local_number}+${local_number}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.603876" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.599091" elapsed="0.004838"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.599001" elapsed="0.004955"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<var>${final_rate}</var>
<arg>${sum_local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.604101" elapsed="0.000040"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_final_rate}</var>
<arg>0.9*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.604292" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_final_rate}</var>
<arg>1.1*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.604457" elapsed="0.000021"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &gt; ${low_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.604619" elapsed="0.000019"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &lt; ${high_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.604775" elapsed="0.000020"/>
</kw>
<arg>${20000}</arg>
<arg>${TC_DURATION_IN_SECONDS}</arg>
<doc>Test case template. Input parameter ${total_notification_rate} determines, how many publisher/subscriber
pais take part in the test case. For every 5000 one pair is created.
The test case itself firstly subscribe listeners, then run publishers and at the end unsubscribe listeners
and check achieved rates.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.415442" elapsed="0.189441">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.606177" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.605781" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.605763" elapsed="0.000500"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:18:24.606405" elapsed="0.000328"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.611834" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.611401" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-12T00:18:24.612081" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.611937" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.611919" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.612613" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.612309" elapsed="0.000330"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.613053" level="INFO">${reference} = controller_rest_cars_perf_txt_Noloss_Rate_1Node_Notifications_rate_20k</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.612791" elapsed="0.000289"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-12T00:18:24.613427" level="INFO">${reference} = controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.613250" elapsed="0.000203"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.613941" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.613599" elapsed="0.000368"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.614517" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.614117" elapsed="0.000431"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.615191" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.614718" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.615760" level="INFO">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.615429" elapsed="0.000379"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.611082" elapsed="0.004782"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.605572" elapsed="0.010341"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.605218" elapsed="0.010735"/>
</kw>
<tag>critical</tag>
<status status="FAIL" start="2026-04-12T00:18:24.398917" elapsed="0.217075">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_20k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</status>
</test>
<test id="s1-s2-t3" name="Notifications_rate_60k" line="38">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-12T00:18:24.619279" elapsed="0.000236"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-12T00:18:24.619005" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.620586" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.620474" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.620454" elapsed="0.000203"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.625589" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.625480" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.625461" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.626670" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:18:24.626282" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.627166" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:18:24.626855" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:18:24.627240" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:18:24.627412" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.625880" elapsed="0.001559"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.627813" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.628064" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.627921" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.627903" elapsed="0.000260"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.627652" elapsed="0.000536"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.627494" elapsed="0.000719"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:18:24.625083" elapsed="0.003183"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-12T00:18:24.620178" elapsed="0.008141"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:18:24.619725" elapsed="0.008638"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-12T00:18:24.616852" elapsed="0.011562"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.635519" level="INFO">Overall requested rate: 60000, test duration: 300 seconds.</msg>
<arg>Overall requested rate: ${total_notification_rate}, test duration: ${test_duration_in_seconds} seconds.</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.635195" elapsed="0.000370"/>
</kw>
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.636665" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.636919" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.636377" elapsed="0.000610"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.637565" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.637170" elapsed="0.000438"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-12T00:18:24.638110" elapsed="0.000049"/>
</return>
<msg time="2026-04-12T00:18:24.638386" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.637787" elapsed="0.000671"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.639048" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:18:24.638624" elapsed="0.000467"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.636073" elapsed="0.003092"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-12T00:18:24.635757" elapsed="0.003464"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.641195" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.639371" elapsed="0.001851"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.641992" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${count}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.641664" elapsed="0.000355"/>
</kw>
<kw name="Subscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.646579" 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-12T00:18:24.646270" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-12T00:18:24.646652" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:18:24.646803" 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-12T00:18:24.645906" elapsed="0.000922"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.647413" level="INFO">&amp;{mapping} = { ID=working-pair-1 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.646987" elapsed="0.000454"/>
</kw>
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Post_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-12T00:18:24.681341" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.680890" elapsed="0.000482"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.682301" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/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-12T00:18:24.681872" elapsed="0.000531">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.682521" 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-12T00:18:24.681538" elapsed="0.001013"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.683262" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.682763" elapsed="0.000553"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.683688" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.683874" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.683503" elapsed="0.000397"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.684394" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.684100" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.685631" level="INFO">mapping: {'ID': 'working-pair-1'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.685160" elapsed="0.000517"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.686288" 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-12T00:18:24.685836" elapsed="0.000479"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.687417" level="INFO">${value} = working-pair-1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-12T00:18:24.686720" elapsed="0.000739"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.689191" level="INFO">${encoded} = working-pair-1</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.688782" elapsed="0.000445"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-12T00:18:24.689307" elapsed="0.000077"/>
</return>
<msg time="2026-04-12T00:18:24.689650" level="INFO">${encoded_value} = working-pair-1</msg>
<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="PASS" start="2026-04-12T00:18:24.687957" elapsed="0.001732"/>
</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="PASS" start="2026-04-12T00:18:24.689914" elapsed="0.000564"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-12T00:18:24.686539" elapsed="0.004065"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.686367" elapsed="0.004283"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-12T00:18:24.690696" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:18:24.690860" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-12T00:18:24.684818" elapsed="0.006068"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.684516" elapsed="0.006402"/>
</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-12T00:18:24.691089" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.690943" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.684494" elapsed="0.006715"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.691806" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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-12T00:18:24.691349" elapsed="0.000485"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.691882" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.680278" elapsed="0.011729"/>
</kw>
<msg time="2026-04-12T00:18:24.692063" 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-12T00:18:24.667862" elapsed="0.024250"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.704735" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.717286" elapsed="0.000042"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.729436" 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-12T00:18:24.729628" 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-12T00:18:24.729815" 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-12T00:18:24.730269" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.730087" elapsed="0.000241"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.730027" elapsed="0.000326"/>
</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-12T00:18:24.730528" 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-12T00:18:24.730696" 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-12T00:18:24.730859" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.729997" elapsed="0.000916"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.729894" elapsed="0.001052"/>
</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-12T00:18:24.731094" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.731199" elapsed="0.000018"/>
</return>
<msg time="2026-04-12T00:18:24.731315" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.663393" elapsed="0.067949"/>
</kw>
<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-12T00:18:24.756065" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml</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-12T00:18:24.755687" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.756963" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' 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-12T00:18:24.756659" elapsed="0.000376">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.757163" 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-12T00:18:24.756310" elapsed="0.000881"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.757761" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml</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-12T00:18:24.757355" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-12T00:18:24.758085" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-12T00:18:24.758252" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.757945" elapsed="0.000341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.758707" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.758452" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-12T00:18:24.759168" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.758832" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.759702" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.759399" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.759256" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.758808" elapsed="0.000986"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.760593" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</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-12T00:18:24.759984" elapsed="0.000638"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-12T00:18:24.760671" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-12T00:18:24.755033" elapsed="0.005765"/>
</kw>
<msg time="2026-04-12T00:18:24.760887" 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-12T00:18:24.742337" elapsed="0.018601"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.773394" 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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.785642" elapsed="0.000028"/>
</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-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.797795" 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-12T00:18:24.797987" 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-12T00:18:24.798451" elapsed="0.000027"/>
</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-12T00:18:24.798832" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.798688" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.798673" elapsed="0.000237"/>
</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-12T00:18:24.799043" 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-12T00:18:24.799230" 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-12T00:18:24.799392" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.798644" elapsed="0.000800"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.798539" elapsed="0.000931"/>
</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-12T00:18:24.799608" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.799682" elapsed="0.000016"/>
</return>
<msg time="2026-04-12T00:18:24.799801" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>name_prefix=post_</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</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 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( 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-12T00:18:24.741419" elapsed="0.058409"/>
</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-12T00:18:24.801157" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/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-12T00:18:24.800869" elapsed="0.000359">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-12T00:18:24.801322" 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-12T00:18:24.800532" elapsed="0.000815"/>
</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-12T00:18:24.801694" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.801451" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.802256" 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-12T00:18:24.801946" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.801774" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.801433" elapsed="0.000907"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.804660" 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-12T00:18:24.802489" elapsed="0.002198"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-12T00:18:24.804739" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:18:24.804893" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-1node-rest-cars-perf-all-vanadium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-12T00:18:24.800171" elapsed="0.004747"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.806522" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.806238" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.806977" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.806736" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.807433" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.807187" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.807864" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.807623" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-12T00:18:24.808721" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-12T00:18:24.808515" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-12T00:18:24.809104" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-12T00:18:24.808896" elapsed="0.000259"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.809304" elapsed="0.000258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.810017" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.809725" elapsed="0.000359"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-12T00:18:24.810164" elapsed="0.000039"/>
</return>
<msg time="2026-04-12T00:18:24.810350" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-12T00:18:24.808100" elapsed="0.002276"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-12T00:18:24.813068" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.812726" elapsed="0.000726">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:18:24.810458" elapsed="0.003080">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.813717" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.813570" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-04-12T00:18:24.810436" elapsed="0.003371">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-12T00:18:24.814191" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.814327" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.814290" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.814273" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.814534" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.814602" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.805295" elapsed="0.009412">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.814823" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.652338" elapsed="0.162586">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.815231" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.815039" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:18:24.815022" elapsed="0.000301"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.815356" elapsed="0.000014"/>
</return>
<arg>${SUBSCRIBE_YNL_DIR}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.647694" elapsed="0.167758">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${count}</arg>
<doc>Subscribe listener for the notifications with identifier ${gid}.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.645446" elapsed="0.170103">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<var name="${suffix}">5000</var>
<status status="FAIL" start="2026-04-12T00:18:24.641528" elapsed="0.174078">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</iter>
<var>${suffix}</var>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<value>${total_notification_rate}+1</value>
<value>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</value>
<status status="FAIL" start="2026-04-12T00:18:24.641276" elapsed="0.174384">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.815828" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<arg>${test_duration_in_seconds}</arg>
<arg>${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Start publishing notifications by invoking publish-notifications rpc.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.816145" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.815952" elapsed="0.000259"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.815901" elapsed="0.000335"/>
</for>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Notifications_Active_Status</arg>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.816430" elapsed="0.000023"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${validator}</var>
<arg>Check_Notifications_Active_Status</arg>
<arg>data_holder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.816646" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${validation_timeout_in_seconds}</var>
<arg>${test_duration_in_seconds}+${DNB_CHECK_TOLERANCE_IN_SECONDS}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.816837" elapsed="0.000022"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<arg>timeout=${validation_timeout_in_seconds}s</arg>
<arg>period=${DNB_CHECK_PERIOD_IN_SECONDS}s</arg>
<arg>getter=${getter}</arg>
<arg>stateless_validator=${validator}</arg>
<doc>Repeatedly run getter and plug its output to validator. If both pass, return validator message.
If getter fails, fail. If validator fails, repeat in WUKS fashion (fail when timeout is exceeded).
FIXME: Cover this keyword in WaitUtilTest.robot</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.817219" elapsed="0.000024"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.817401" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_pair_rate}</var>
<arg>0.9*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.817578" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_pair_rate}</var>
<arg>1.1*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.817740" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<var>${all_not}</var>
<var>${id_not}</var>
<var>${err_not}</var>
<var>${local_number}</var>
<arg>${DNB_TESTED_MEMBER_INDEX}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Unsubscribe listener for the ${gid} identifier. Return statistics of the publishing process.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.821363" elapsed="0.000027"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.821551" elapsed="0.000021"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.821710" elapsed="0.000020"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${id_not}</arg>
<arg>${local_number}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.821866" elapsed="0.000019"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${rate}</var>
<arg>${local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822024" elapsed="0.000052"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &gt; ${low_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822236" elapsed="0.000020"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${rate} &lt; ${high_limit_pair_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822400" elapsed="0.000025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${sum_local_number}</var>
<arg>${sum_local_number}+${local_number}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822565" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:18:24.817895" elapsed="0.004722"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="NOT RUN" start="2026-04-12T00:18:24.817808" elapsed="0.004836"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<var>${final_rate}</var>
<arg>${sum_local_number}/${test_duration_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822786" elapsed="0.000019"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${low_limit_final_rate}</var>
<arg>0.9*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.822944" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${high_limit_final_rate}</var>
<arg>1.1*${total_notification_rate}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.823102" elapsed="0.000020"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &gt; ${low_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.823275" elapsed="0.000020"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${final_rate} &lt; ${high_limit_final_rate}</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.823428" elapsed="0.000019"/>
</kw>
<arg>${60000}</arg>
<arg>${TC_DURATION_IN_SECONDS}</arg>
<doc>Test case template. Input parameter ${total_notification_rate} determines, how many publisher/subscriber
pais take part in the test case. For every 5000 one pair is created.
The test case itself firstly subscribe listeners, then run publishers and at the end unsubscribe listeners
and check achieved rates.</doc>
<status status="FAIL" start="2026-04-12T00:18:24.633158" elapsed="0.190377">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-12T00:18:24.824816" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:18:24.824425" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.824407" elapsed="0.000501"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:18:24.825051" elapsed="0.000350"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.830434" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.829984" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-12T00:18:24.830684" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:18:24.830541" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-12T00:18:24.830522" elapsed="0.000225"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.831206" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:18:24.830890" elapsed="0.000343"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:18:24.831651" level="INFO">${reference} = controller_rest_cars_perf_txt_Noloss_Rate_1Node_Notifications_rate_60k</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:18:24.831386" elapsed="0.000292"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-12T00:18:24.832022" level="INFO">${reference} = controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.831831" elapsed="0.000220"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.832565" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.832217" elapsed="0.000375"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.833095" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:18:24.832776" elapsed="0.000370"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.833739" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-12T00:18:24.833301" elapsed="0.000487"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:18:24.834282" level="INFO">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:18:24.833969" elapsed="0.000360"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-12T00:18:24.829681" elapsed="0.004703"/>
</kw>
<status status="PASS" start="2026-04-12T00:18:24.824218" elapsed="0.010215"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-12T00:18:24.823852" elapsed="0.010622"/>
</kw>
<tag>critical</tag>
<status status="FAIL" start="2026-04-12T00:18:24.616383" elapsed="0.218135">... click for list of related bugs or create a new one if needed (with the
"controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_rest_cars_perf_txt_noloss_rate_1node_notifications_rate_60k&amp;order=bug_status"

Non-existing index or alias 'ClusterManagement__session_1'.</status>
</test>
<kw name="Close All Connections" owner="SSHLibrary" type="TEARDOWN">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-12T00:18:24.835086" elapsed="0.000124"/>
</kw>
<doc>DOMNotificationBroker testing: No-loss rate

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

Provides routing of YANG notifications from publishers to subscribers.
The purpose of this test is to determine the broker can forward messages without
loss. We do this on a single-node setup by incrementally adding publishers and
subscribers.</doc>
<status status="FAIL" start="2026-04-12T00:18:23.995503" elapsed="0.839739"/>
</suite>
<status status="FAIL" start="2026-04-12T00:18:23.325112" elapsed="1.510867"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="12" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="3" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-rest-cars-perf.txt" id="s1" pass="0" fail="12" skip="0">controller-rest-cars-perf.txt</stat>
<stat name="010 Crud Mdsal Perf" id="s1-s1" pass="0" fail="9" skip="0">controller-rest-cars-perf.txt.010 Crud Mdsal Perf</stat>
<stat name="Noloss Rate 1Node" id="s1-s2" pass="0" fail="3" skip="0">controller-rest-cars-perf.txt.Noloss Rate 1Node</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
