<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-25T23:37:00.183028" 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-chromium/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-25T23:37:00.772801" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:00.768804" elapsed="0.004069"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T23:37:00.768351" elapsed="0.004621"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.777764" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-25T23:37:00.774386" elapsed="0.003411"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T23:37:00.778046" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:00.777907" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:00.777875" elapsed="0.000248"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.778680" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:00.778283" elapsed="0.000444"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.779238" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-25T23:37:00.778889" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-25T23:37:00.779811" elapsed="0.000308"/>
</kw>
<msg time="2026-04-25T23:37:00.780229" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:00.780278" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:00.779432" elapsed="0.000869"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.780843" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:00.780461" elapsed="0.000409"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.782378" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:00.782099" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.782804" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:00.782548" elapsed="0.000282"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.783527" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.782989" elapsed="0.000567"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.786576" elapsed="0.000231"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.787301" level="INFO">${member_ip} = 10.30.171.86</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:37:00.786972" elapsed="0.000356"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.787470" elapsed="0.000291"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.788574" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:37:00.788277" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:37:00.788648" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:37:00.788821" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:37:00.787974" elapsed="0.000871"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:37:00.789531" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.86:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7b9e0ca90bd0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:37:00.789076" elapsed="0.000632"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.789861" elapsed="0.000212"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-25T23:37:00.785917" elapsed="0.004218"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:00.785734" elapsed="0.004447"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-25T23:37:00.783619" elapsed="0.006597"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.790845" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:00.790432" elapsed="0.000456"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.791462" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.86'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:00.791057" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.792068" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:00.791657" elapsed="0.000455"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-25T23:37:00.781615" elapsed="0.010555"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-25T23:37:00.774013" elapsed="0.018213"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:00.792419" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:00.792294" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:00.792274" elapsed="0.000216"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.795456" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:00.795075" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.795922" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:00.795630" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:37:00.796008" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:37:00.796169" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:37:00.794741" elapsed="0.001453"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:00.797188" level="INFO">${member_ip} = 10.30.171.86</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.796885" elapsed="0.000331"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:00.798206" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:37:00.797837" elapsed="0.000509"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:00.802034" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:00.801046" elapsed="0.001077"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:00.801024" elapsed="0.001138"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:00.802801" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:37:00.802351" elapsed="0.000752"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.804024" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.86" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:00.803354" elapsed="0.000776"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:00.805323" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:00.804384" elapsed="0.000989"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:37:00.807114" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:37:00.807296" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-25T23:37:00.806657" elapsed="0.000683"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:00.807663" elapsed="0.000478"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:37:00.809368" level="INFO">Logging into '10.30.171.86:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:37:01.151007" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 25 23:36:58 UTC 2026

  System load:  0.99               Processes:             128
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 8%                 IPv4 address for ens3: 10.30.171.86
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-41487-7-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-25T23:37:00.808945" elapsed="0.342170"/>
</kw>
<msg time="2026-04-25T23:37:01.151187" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:00.808513" elapsed="0.342809"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:37:00.805790" elapsed="0.345670"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:37:01.152258" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:37:01.165114" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:37:01.165361" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:37:01.165503" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:37:01.151782" elapsed="0.013789"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.166009" elapsed="0.000737"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.168284" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:01.167492" elapsed="0.000937"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.169092" elapsed="0.000074"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.168666" elapsed="0.000611"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.168626" elapsed="0.000705"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:37:01.169771" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-04-25T23:37:01.169450" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.169425" elapsed="0.000627"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.170142" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:01.174341" elapsed="0.000735"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.175443" elapsed="0.000400"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.176210" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:01.170797" elapsed="0.005823"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-25T23:37:00.800107" elapsed="0.376755"/>
</kw>
<msg time="2026-04-25T23:37:01.176979" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:00.799470" elapsed="0.377592"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:37:00.799000" elapsed="0.378174"/>
</kw>
<msg time="2026-04-25T23:37:01.177232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:00.798492" elapsed="0.378807"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:01.180770" elapsed="0.000492"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.181473" elapsed="0.000204"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.181942" elapsed="0.000175"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:01.177686" elapsed="0.004483"/>
</kw>
<msg time="2026-04-25T23:37:01.182262" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:37:00.797420" elapsed="0.384867"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.182700" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:01.182452" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:37:01.182785" elapsed="0.000032"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:37:00.796547" elapsed="0.386366"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:00.796380" elapsed="0.386570"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:37:00.796248" elapsed="0.386758"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:37:00.792700" elapsed="0.390369"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-25T23:37:01.183211" elapsed="0.000208"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.196482" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.196361" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.196339" elapsed="0.000217"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:01.196884" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.196705" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.197455" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:01.197183" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.197881" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:01.197639" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:01.198696" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:37:01.198452" elapsed="0.000466">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-25T23:37:01.199051" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:37:01.199097" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.198091" elapsed="0.001029"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:01.199410" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:01.199196" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.199177" elapsed="0.000330"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:01.200260" level="INFO">${ip_address} = 10.30.171.86</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.199992" elapsed="0.000295"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:37:01.200333" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:37:01.200483" level="INFO">${odl_ip} = 10.30.171.86</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:37:01.199716" elapsed="0.000791"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.200648" elapsed="0.000459"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:01.201381" level="INFO">index=4
host=10.30.171.86
alias=None
port=8101
timeout=10 seconds
newline=

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

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.203800" elapsed="0.665467"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:01.872876" elapsed="0.000386"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.873416" elapsed="0.000177"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.873731" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:01.870769" elapsed="0.003116"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:01.869759" elapsed="0.004172"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:37:01.196058" elapsed="0.677952"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:37:01.184144" elapsed="0.689917"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.183766" elapsed="0.690347"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:01.183636" elapsed="0.690519"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-25T23:37:01.183479" elapsed="0.690719"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T23:37:00.773383" elapsed="1.100882"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.876786" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.876662" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.876636" elapsed="0.000223"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.881203" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.881096" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.881078" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.882222" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:01.881794" elapsed="0.000455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:01.882692" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:01.882396" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:37:01.882761" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:37:01.882920" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:37:01.881480" elapsed="0.001464"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.887904" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.887798" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.887780" elapsed="0.000205"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:01.889180" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:01.889048" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:01.889030" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:01.889709" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:01.889378" elapsed="0.000358"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:01.890195" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:01.889940" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:01.981455" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:01.890855" elapsed="0.090799"/>
</kw>
<msg time="2026-04-25T23:37:01.981839" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:37:01.981886" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.890370" elapsed="0.091554"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.130326" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "r "o "l "l "e "r "/ "O "n "e "N "o "[78Cd "[A[78Ce
 "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:37:01.982740" elapsed="0.147831"/>
</kw>
<msg time="2026-04-25T23:37:02.130771" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:37:02.130819" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.982166" elapsed="0.148691"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.131338" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:02.131003" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.130939" elapsed="0.000583"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:02.132305" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "r "o "l "l "e "r "/ "O "n "e "N "o "[78Cd "[A[78Ce
 "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:02.131659" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.132691" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:02.132467" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.132449" elapsed="0.000415"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:37:02.132904" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:02.135203" elapsed="0.000452"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:02.136190" elapsed="0.000308"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:02.136816" elapsed="0.000256"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:02.134408" elapsed="0.002757"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:02.133238" elapsed="0.004063"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:37:01.888742" elapsed="0.248661"/>
</kw>
<msg time="2026-04-25T23:37:02.137500" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:02.137545" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.888125" elapsed="0.249458"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:37:02.137769" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:37:02.137661" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.137641" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.138262" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.138584" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:37:02.138715" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:37:01.887516" elapsed="0.251309"/>
</kw>
<msg time="2026-04-25T23:37:02.138920" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:02.138991" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.883340" elapsed="0.255691"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.139346" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:02.139108" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.139090" elapsed="0.000334"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:01.883208" elapsed="0.256239"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:37:01.883019" elapsed="0.256467"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:37:01.880789" elapsed="0.258753"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T23:37:01.874844" elapsed="0.264754"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:01.874411" elapsed="0.265229"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-25T23:37:00.767988" elapsed="1.371710"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:02.141859" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:02.141752" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.141734" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:02.142297" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:02.142073" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.142640" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:02.142465" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.190322" level="INFO">log:set INFO</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:02.143223" elapsed="0.047164"/>
</kw>
<msg time="2026-04-25T23:37:02.190498" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:37:02.190542" level="INFO">${message_write} = log:set INFO
</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:02.142854" elapsed="0.047710"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.192439" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:37:02.191082" elapsed="0.001412"/>
</kw>
<msg time="2026-04-25T23:37:02.192588" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:37:02.192631" level="INFO">${message_wait} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:02.190729" elapsed="0.001927"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.192941" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:02.192732" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.192712" elapsed="0.000326"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:02.193421" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:02.193169" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:02.193733" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:02.193535" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:02.193517" elapsed="0.000293"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:37:02.193843" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:02.194917" elapsed="0.000318"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:37:02.195386" elapsed="0.000211"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:37:02.195734" elapsed="0.000108"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:02.194614" elapsed="0.001280"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:02.194120" elapsed="0.001818"/>
</kw>
<arg>log:set ${CONTROLLER_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:37:02.140098" elapsed="0.055954"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.196572" level="INFO">${mininet_conn_id} = 8</msg>
<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="PASS" start="2026-04-25T23:37:02.196217" elapsed="0.000381"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:37:02.197096" level="INFO">${mininet_conn_id} = 8</msg>
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:37:02.196754" elapsed="0.000385"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:37:02.198749" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:37:02.198825" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-25T23:37:02.198465" elapsed="0.000384"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:02.199010" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:37:02.200368" level="INFO">Logging into '10.30.171.128:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:37:03.017476" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Sat Apr 25 23:37:02 UTC 2026

  System load:  0.06               Processes:             110
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.128
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-25T23:37:02.199815" elapsed="0.817833"/>
</kw>
<msg time="2026-04-25T23:37:03.017742" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:02.199477" elapsed="0.818346"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:37:02.198049" elapsed="0.819896"/>
</kw>
<msg time="2026-04-25T23:37:03.018017" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:02.197665" elapsed="0.820400"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-25T23:37:02.197323" elapsed="0.820816"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.026084" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-25T23:37:03.034762" level="INFO">'/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/suites/controller/OneNode_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py' -&gt; '/home/jenkins//cluster_rest_script.py'</msg>
<arg>/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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="PASS" start="2026-04-25T23:37:03.018361" elapsed="0.016487"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.035371" level="INFO">Executing command 'ls'.</msg>
<msg time="2026-04-25T23:37:03.047562" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:37:03.047858" level="INFO">${stdout} = cluster_rest_script.py
lf-env.sh</msg>
<msg time="2026-04-25T23:37:03.047992" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:37:03.048093" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:37:03.035106" elapsed="0.013042"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:37:03.049156" level="INFO">Creating Session using : alias=session, url=http://10.30.171.86:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7b9e0b907190&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>session</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:37:03.048513" elapsed="0.001183"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:00.767570" elapsed="2.282274"/>
</kw>
<test id="s1-s1-t1" name="Add Cars" line="54">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:37:03.054940" elapsed="0.000360"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:37:03.054593" elapsed="0.000784"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:03.056922" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:03.056735" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.056702" elapsed="0.000348"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:03.063920" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:03.063757" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.063730" elapsed="0.000315"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:03.065236" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:03.064781" elapsed="0.000483"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:03.065709" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:03.065413" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:37:03.065778" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:37:03.065940" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:37:03.064403" elapsed="0.001577"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:03.071124" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:03.071008" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.070986" elapsed="0.000212"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:03.072610" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:03.072503" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.072485" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:03.073156" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:03.072810" elapsed="0.000373"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.073714" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:03.073492" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.135849" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:03.074226" elapsed="0.061802"/>
</kw>
<msg time="2026-04-25T23:37:03.136245" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:37:03.136293" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:03.073883" elapsed="0.062447"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.178758" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:37:03.136926" elapsed="0.041942"/>
</kw>
<msg time="2026-04-25T23:37:03.179046" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:37:03.179091" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:03.136535" elapsed="0.042593"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.179657" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:03.179222" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.179194" elapsed="0.000547"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:03.180199" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:03.179875" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.180528" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:03.180329" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.180311" elapsed="0.000293"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:37:03.180640" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:03.183304" elapsed="0.000152"/>
</kw>
<msg time="2026-04-25T23:37:03.183519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:03.182201" elapsed="0.001482"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.183943" elapsed="0.000097"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.184282" elapsed="0.001598"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:03.181575" elapsed="0.004441"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:03.181029" elapsed="0.005058"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:37:03.072010" elapsed="0.114183"/>
</kw>
<msg time="2026-04-25T23:37:03.186285" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:03.186329" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:03.071338" elapsed="0.115028"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:37:03.186553" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:37:03.186443" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.186424" elapsed="0.000214"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.187044" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.187372" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:37:03.187445" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:37:03.070648" elapsed="0.116904"/>
</kw>
<msg time="2026-04-25T23:37:03.187658" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:03.187704" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:03.066399" elapsed="0.121343"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:03.188083" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:03.187820" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:03.187802" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:03.066265" elapsed="0.121926"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:37:03.066050" elapsed="0.122176"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:37:03.063175" elapsed="0.125109"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:37:03.056319" elapsed="0.132019"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:03.055680" elapsed="0.132702"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:37:03.051452" elapsed="0.136982"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:03.196291" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add --itemtype car --itemcount 10000 --ipr 10000</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:03.196037" elapsed="0.000300"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:03.199455" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add --itemtype car --itemcount 10000 --ipr 10000</msg>
<msg time="2026-04-25T23:37:03.199547" level="INFO">${output} =  python cluster_rest_script.py --host 10.30.171.86 --port 8181 add --itemtype car --itemcount 10000 --ipr 10000 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:03.196652" elapsed="0.002921"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:03.200016" level="INFO"> python cluster_rest_script.py --host 10.30.171.86 --port 8181 add --itemtype car --itemcount 10000 --ipr 10000 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:03.199752" elapsed="0.000311"/>
</kw>
<arg>${addcarcmd}</arg>
<arg>${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:37:03.195658" elapsed="0.004461"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:06.095841" level="INFO">[?2004l2026-04-25 23:37:03,298 INFO: Add 10000 car(s) to 10.30.171.86:8181 (10000 per request)
2026-04-25 23:37:06,058 INFO: Response code(s) got per number of requests: {201: 1}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:37:03.204902" elapsed="2.891121"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:37:03.204425" elapsed="2.891684"/>
</kw>
<msg time="2026-04-25T23:37:06.096165" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Wait Until Keyword Succeeds</arg>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:03.204075" elapsed="2.892173"/>
</kw>
<msg time="2026-04-25T23:37:06.096449" level="INFO">${output} = [?2004l2026-04-25 23:37:03,298 INFO: Add 10000 car(s) to 10.30.171.86:8181 (10000 per request)
2026-04-25 23:37:06,058 INFO: Response code(s) got per number of requests: {201: 1}
Traceback (most r...</msg>
<var>${output}</var>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit, return the printed output.</doc>
<status status="PASS" start="2026-04-25T23:37:03.203744" elapsed="2.892736"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.097087" level="INFO">[?2004l2026-04-25 23:37:03,298 INFO: Add 10000 car(s) to 10.30.171.86:8181 (10000 per request)
2026-04-25 23:37:06,058 INFO: Response code(s) got per number of requests: {201: 1}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:06.096708" elapsed="0.000430"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>ERROR</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:37:06.097283" elapsed="0.000478"/>
</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-25T23:37:06.099197" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:06.098725" elapsed="0.000539"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.098702" elapsed="0.000590"/>
</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-25T23:37:06.099433" elapsed="0.000323"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.105123" 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-25T23:37:06.104611" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:37:06.105379" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:37:06.105229" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.105210" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.105709" elapsed="0.000025"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:37:06.105878" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.106064" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:37:06.106221" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:37:06.106376" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.106530" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.106684" elapsed="0.000020"/>
</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-25T23:37:06.104310" elapsed="0.002451"/>
</kw>
<status status="PASS" start="2026-04-25T23:37:06.098507" elapsed="0.008305"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:37:06.098112" elapsed="0.008748"/>
</kw>
<doc>Request to add 10000 cars (timeout in 11m).</doc>
<status status="PASS" start="2026-04-25T23:37:03.050193" elapsed="3.056707"/>
</test>
<test id="s1-s1-t2" name="Verify Cars" line="61">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:37:06.110768" elapsed="0.000231"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:37:06.110517" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:06.112222" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:06.112102" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.111975" elapsed="0.000316"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:06.116961" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:06.116774" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.116757" elapsed="0.000298"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.118037" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:06.117635" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.118509" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:06.118213" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:37:06.118579" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:37:06.118733" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:37:06.117271" elapsed="0.001487"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:06.124232" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:06.124123" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.124103" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:06.125482" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:06.125375" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.125357" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:06.126001" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:06.125681" elapsed="0.000347"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:06.126399" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:06.126174" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:06.183642" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:06.126891" elapsed="0.056851"/>
</kw>
<msg time="2026-04-25T23:37:06.183902" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:37:06.183948" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:06.126575" elapsed="0.057437"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:37:06.226686" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:37:06.184518" elapsed="0.042273"/>
</kw>
<msg time="2026-04-25T23:37:06.226953" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:37:06.227028" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:06.184173" elapsed="0.042894"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.227361" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:06.227145" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.227125" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.227870" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:06.227570" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.228233" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:06.228026" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.228007" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:37:06.228342" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:06.230971" elapsed="0.000171"/>
</kw>
<msg time="2026-04-25T23:37:06.231205" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:06.229826" elapsed="0.001510"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.231597" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.231916" elapsed="0.000095"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:06.229217" elapsed="0.002904"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:06.228614" elapsed="0.003571"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:37:06.125076" elapsed="0.107206"/>
</kw>
<msg time="2026-04-25T23:37:06.232372" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:06.232416" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:06.124440" elapsed="0.108013"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:37:06.232637" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:37:06.232530" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.232511" elapsed="0.000298"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.233216" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.233543" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:37:06.233615" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:37:06.123762" elapsed="0.109959"/>
</kw>
<msg time="2026-04-25T23:37:06.233814" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:06.233861" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:06.119142" elapsed="0.114783"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:06.234260" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:06.234019" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:06.234001" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:06.119011" elapsed="0.115348"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:37:06.118815" elapsed="0.115576"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:37:06.116416" elapsed="0.118029"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:37:06.111704" elapsed="0.122797"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:06.111228" elapsed="0.123318"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:37:06.108252" elapsed="0.126347"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:37:06.235639" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:37:06.235332" elapsed="0.000334"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:06.235804" elapsed="0.000291"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:37:06.235074" elapsed="0.001082"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.237435" level="INFO">handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:37:08.237737" level="INFO">${output} = 
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/hom...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:37:06.236296" elapsed="2.001593"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.239172" level="INFO">
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:08.238291" elapsed="0.000952"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:37:06.234745" elapsed="2.004579"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.247762" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:37:08.261392" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:37:08.261606" level="INFO">${output_log} = 2026-04-25 23:37:03,298 INFO: Add 10000 car(s) to 10.30.171.86:8181 (10000 per request)
2026-04-25 23:37:06,058 INFO: Response code(s) got per number of requests: {201: 1}</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:37:08.247619" elapsed="0.014043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.262659" level="INFO">2026-04-25 23:37:03,298 INFO: Add 10000 car(s) to 10.30.171.86:8181 (10000 per request)
2026-04-25 23:37:06,058 INFO: Response code(s) got per number of requests: {201: 1}</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:08.262039" elapsed="0.000724"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:37:08.263897" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_add_cars.log"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_add_cars.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:37:08.263165" elapsed="0.000892"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>cluster_rest_script_add_cars.log</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:37:08.247277" elapsed="0.016919"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:37:08.486420" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:37:08.493087" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/car:cars?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:37:08 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;&lt;car-entry&gt;&lt;id&gt;4248&lt;/id&gt;&lt;model&gt;model4248&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4134&lt;/id&gt;&lt;model&gt;model4134&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9409&lt;/id&gt;&lt;model&gt;model9409&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1673&lt;/id&gt;&lt;model&gt;model1673&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9691&lt;/id&gt;&lt;model&gt;model9691&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9794&lt;/id&gt;&lt;model&gt;model9794&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7651&lt;/id&gt;&lt;model&gt;model7651&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;344&lt;/id&gt;&lt;model&gt;model344&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3530&lt;/id&gt;&lt;model&gt;model3530&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;447&lt;/id&gt;&lt;model&gt;model447&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1163&lt;/id&gt;&lt;model&gt;model1163&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4440&lt;/id&gt;&lt;model&gt;model4440&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4239&lt;/id&gt;&lt;model&gt;model4239&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4147&lt;/id&gt;&lt;model&gt;model4147&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9418&lt;/id&gt;&lt;model&gt;model9418&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1660&lt;/id&gt;&lt;model&gt;model1660&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7664&lt;/id&gt;&lt;model&gt;model7664&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;357&lt;/id&gt;&lt;model&gt;model357&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3521&lt;/id&gt;&lt;model&gt;model3521&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1150&lt;/id&gt;&lt;model&gt;model1150&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4222&lt;/id&gt;&lt;model&gt;model4222&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5208&lt;/id&gt;&lt;model&gt;model5208&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2808&lt;/id&gt;&lt;model&gt;model2808&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1699&lt;/id&gt;&lt;model&gt;model1699&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7468&lt;/id&gt;&lt;model&gt;model7468&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3556&lt;/id&gt;&lt;model&gt;model3556&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3659&lt;/id&gt;&lt;model&gt;model3659&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1181&lt;/id&gt;&lt;model&gt;model1181&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4213&lt;/id&gt;&lt;model&gt;model4213&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5217&lt;/id&gt;&lt;model&gt;model5217&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1547&lt;/id&gt;&lt;model&gt;model1547&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1686&lt;/id&gt;&lt;model&gt;model1686&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7682&lt;/id&gt;&lt;model&gt;model7682&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2130&lt;/id&gt;&lt;model&gt;model2130&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;331&lt;/id&gt;&lt;model&gt;model331&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3547&lt;/id&gt;&lt;model&gt;model3547&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4300&lt;/id&gt;&lt;model&gt;model4300&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5331&lt;/id&gt;&lt;model&gt;model5331&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7591&lt;/id&gt;&lt;model&gt;model7591&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7302&lt;/id&gt;&lt;model&gt;model7302&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2041&lt;/id&gt;&lt;model&gt;model2041&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2236&lt;/id&gt;&lt;model&gt;model2236&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3827&lt;/id&gt;&lt;model&gt;model3827&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;482&lt;/id&gt;&lt;model&gt;model482&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3632&lt;/id&gt;&lt;model&gt;model3632&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4580&lt;/id&gt;&lt;model&gt;model4580&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5340&lt;/id&gt;&lt;model&gt;model5340&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7315&lt;/id&gt;&lt;model&gt;model7315&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2054&lt;/id&gt;&lt;model&gt;model2054&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2249&lt;/id&gt;&lt;model&gt;model2249&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;495&lt;/id&gt;&lt;model&gt;model495&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3623&lt;/id&gt;&lt;model&gt;model3623&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4326&lt;/id&gt;&lt;model&gt;model4326&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4058&lt;/id&gt;&lt;model&gt;model4058&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1595&lt;/id&gt;&lt;model&gt;model1595&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;8186&lt;/id&gt;&lt;model&gt;model8186&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7573&lt;/id&gt;&lt;model&gt;model7573&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9427&lt;/id&gt;&lt;model&gt;model9427&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2254&lt;/id&gt;&lt;model&gt;model2254&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3801&lt;/id&gt;&lt;model&gt;model3801&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;369&lt;/id&gt;&lt;model&gt;model369&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3519&lt;/id&gt;&lt;model&gt;model3519&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4317&lt;/id&gt;&lt;model&gt;model4317&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1582&lt;/id&gt;&lt;model&gt;model1582&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;8199&lt;/id&gt;&lt;model&gt;model8199&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manu... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:37:08.493573" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:37:08.264522" elapsed="0.229091"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:37:08.645041" level="INFO">10000 elements matched 'car-entry'.</msg>
<msg time="2026-04-25T23:37:08.645293" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-entry</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:37:08.493910" elapsed="0.151411"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:37:08.645611" elapsed="0.000468"/>
</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-25T23:37:08.647456" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:08.647043" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.647018" elapsed="0.000533"/>
</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-25T23:37:08.647695" elapsed="0.000353"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.652766" 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-25T23:37:08.652343" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:37:08.653045" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:37:08.652867" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.652850" elapsed="0.000289"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.653279" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:37:08.653454" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.653612" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:37:08.653765" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:37:08.653914" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.654086" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.654240" elapsed="0.000019"/>
</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-25T23:37:08.652046" elapsed="0.002270"/>
</kw>
<status status="PASS" start="2026-04-25T23:37:08.646797" elapsed="0.007570"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:37:08.646393" elapsed="0.008016"/>
</kw>
<doc>Store logs and verify result</doc>
<status status="PASS" start="2026-04-25T23:37:06.107687" elapsed="2.546761"/>
</test>
<test id="s1-s1-t3" name="Add People" line="69">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:37:08.658419" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:37:08.658165" elapsed="0.000515"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:08.659646" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:08.659536" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.659518" elapsed="0.000194"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:08.664212" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:08.664106" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.664088" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.665255" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:37:08.664853" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.665765" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:37:08.665430" elapsed="0.000361"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:37:08.665892" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:37:08.666069" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:37:08.664493" elapsed="0.001601"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:08.671296" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:08.671187" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.671168" elapsed="0.000202"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:37:08.672520" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:37:08.672413" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.672396" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:37:08.673044" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:37:08.672721" elapsed="0.000349"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.673439" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:08.673218" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.718401" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:08.674006" elapsed="0.044524"/>
</kw>
<msg time="2026-04-25T23:37:08.718693" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:37:08.718740" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:08.673610" elapsed="0.045186"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.754358" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:37:08.719316" elapsed="0.035148"/>
</kw>
<msg time="2026-04-25T23:37:08.754624" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:37:08.754669" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:08.718958" elapsed="0.035748"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.755028" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:08.754783" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.754763" elapsed="0.000388"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.755589" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:08.755288" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.755929" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:08.755723" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.755705" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:37:08.756061" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:37:08.758443" elapsed="0.000140"/>
</kw>
<msg time="2026-04-25T23:37:08.758645" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:08.757439" elapsed="0.001337"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.759163" elapsed="0.000112"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.759528" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:37:08.756830" elapsed="0.002886"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:37:08.756314" elapsed="0.003469"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:37:08.672117" elapsed="0.087805"/>
</kw>
<msg time="2026-04-25T23:37:08.760035" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:08.760080" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:08.671511" elapsed="0.088606"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:37:08.760406" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:37:08.760288" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.760176" elapsed="0.000314"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.760875" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.761213" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:37:08.761286" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:37:08.670831" elapsed="0.090561"/>
</kw>
<msg time="2026-04-25T23:37:08.761493" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:37:08.761536" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:08.666473" elapsed="0.095100"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:37:08.761885" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:37:08.761648" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-04-25T23:37:08.761631" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:37:08.666342" elapsed="0.095662"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:37:08.666157" elapsed="0.095881"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:37:08.663734" elapsed="0.098361"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:37:08.659241" elapsed="0.102910"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:37:08.658817" elapsed="0.103379"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:37:08.655740" elapsed="0.106508"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.769944" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 5</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:08.769695" elapsed="0.000313"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:37:08.772963" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 5</msg>
<msg time="2026-04-25T23:37:08.773063" level="INFO">${output} = python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 5 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:37:08.770150" elapsed="0.002939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:37:08.773487" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 5 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:37:08.773237" elapsed="0.000297"/>
</kw>
<arg>${addpeoplecmd}</arg>
<arg>${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:37:08.769337" elapsed="0.004251"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:14.779005" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:37:08,885 INFO: Add 10000 people to 10.30.171.86:8181 (1 per request)
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:08.778317" elapsed="6.002145">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:37:08,885 INFO: Add 10000 people to 10.30.171.86:8181 (1 per request)
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:21.781865" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:15.781229" elapsed="6.001351">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:28.784813" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:22.783458" elapsed="6.002059">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:35.787117" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:29.786267" elapsed="6.001671">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:42.789585" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:36.788722" elapsed="6.001672">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:49.792046" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:43.791230" elapsed="6.001611">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:37:56.794827" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:50.793633" elapsed="6.002705">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:38:03.797697" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
2026-04-25 23:38:03,792 INFO: Response code(s) got per number of requests: {204: 1995}
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:37:57.797164" elapsed="6.001134">No match found for '&gt;' in 6 seconds
Output:
2026-04-25 23:38:03,792 INFO: Response code(s) got per number of requests: {204: 1995}
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:38:04.807370" level="INFO">2026-04-25 23:38:03,800 INFO: Response code(s) got per number of requests: {204: 2020}
2026-04-25 23:38:03,806 INFO: Response code(s) got per number of requests: {204: 1977}
2026-04-25 23:38:03,808 INFO: Response code(s) got per number of requests: {204: 1997}
2026-04-25 23:38:03,809 INFO: Response code(s) got per number of requests: {204: 2011}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:38:04.798908" elapsed="0.008605"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:37:08.777834" elapsed="56.029791"/>
</kw>
<msg time="2026-04-25T23:38:04.807727" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Wait Until Keyword Succeeds</arg>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:37:08.777491" elapsed="56.030348"/>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit, return the printed output.</doc>
<status status="PASS" start="2026-04-25T23:37:08.777176" elapsed="56.030932"/>
</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-25T23:38:04.810063" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:04.809496" elapsed="0.000653"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.809465" elapsed="0.000723"/>
</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-25T23:38:04.810386" elapsed="0.000508"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:04.816359" 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-25T23:38:04.815872" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:04.816615" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:38:04.816465" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.816445" elapsed="0.000257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.816840" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:04.817019" elapsed="0.000022"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.817182" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:04.817342" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:04.817494" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.817646" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.817805" elapsed="0.000021"/>
</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-25T23:38:04.815571" elapsed="0.002313"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:04.809191" elapsed="0.008742"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:04.808620" elapsed="0.009437"/>
</kw>
<doc>Request to add 10000 people (timeout in 11m).</doc>
<status status="PASS" start="2026-04-25T23:37:08.655180" elapsed="56.162921"/>
</test>
<test id="s1-s1-t4" name="Verify People" line="74">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:04.821732" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:04.821481" elapsed="0.000533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:04.823038" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:04.822910" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.822889" elapsed="0.000216"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:04.827665" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:04.827560" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.827542" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:04.828744" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:04.828347" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:04.829240" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:04.828922" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:04.829312" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:04.829469" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:04.827943" elapsed="0.001551"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:04.834854" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:04.834745" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.834726" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:04.836100" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:04.835943" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.835925" elapsed="0.000241"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:04.836600" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:04.836300" elapsed="0.000326"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:04.837016" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:04.836772" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:04.881430" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:04.837526" elapsed="0.044053"/>
</kw>
<msg time="2026-04-25T23:38:04.881819" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:04.881940" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:04.837196" elapsed="0.044839"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:04.918394" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:04.882769" elapsed="0.035747"/>
</kw>
<msg time="2026-04-25T23:38:04.918672" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:04.918717" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:04.882276" elapsed="0.036478"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.919063" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:04.918830" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.918810" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:04.919572" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:04.919273" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.919949" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:04.919743" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.919725" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:04.920111" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:04.922642" elapsed="0.000142"/>
</kw>
<msg time="2026-04-25T23:38:04.922845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:04.921534" elapsed="0.001453"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.923250" elapsed="0.000084"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.923604" elapsed="0.000072"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:04.920887" elapsed="0.003007"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:04.920368" elapsed="0.003604"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:04.835650" elapsed="0.088444"/>
</kw>
<msg time="2026-04-25T23:38:04.924187" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:04.924232" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:04.835075" elapsed="0.089194"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:04.924453" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:38:04.924345" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.924326" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.924915" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.925263" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:04.925334" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:04.834405" elapsed="0.091036"/>
</kw>
<msg time="2026-04-25T23:38:04.925533" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:04.925576" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:04.829872" elapsed="0.095740"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:04.925921" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:04.925687" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:04.925669" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:04.829741" elapsed="0.096297"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:04.829557" elapsed="0.096512"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:04.827161" elapsed="0.098965"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:04.822610" elapsed="0.103572"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:04.822155" elapsed="0.104072"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:04.819163" elapsed="0.107118"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:04.927301" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:04.926993" elapsed="0.000335"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:04.927469" elapsed="0.000203"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:38:04.926725" elapsed="0.001016"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:38:06.928878" level="INFO">handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:38:06.929396" level="INFO">${output} = 
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  Fil...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:38:04.927913" elapsed="2.001558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:06.930823" level="INFO">
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:06.930043" elapsed="0.001008"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:38:04.926424" elapsed="2.004808"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:38:06.944047" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:38:06.957419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:38:06.957587" level="INFO">${output_log} = 2026-04-25 23:37:08,885 INFO: Add 10000 people to 10.30.171.86:8181 (1 per request)
2026-04-25 23:38:03,792 INFO: Response code(s) got per number of requests: {204: 1995}
2026-04-25 23:38:03,800 INFO:...</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:38:06.943852" elapsed="0.013773"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:06.958376" level="INFO">2026-04-25 23:37:08,885 INFO: Add 10000 people to 10.30.171.86:8181 (1 per request)
2026-04-25 23:38:03,792 INFO: Response code(s) got per number of requests: {204: 1995}
2026-04-25 23:38:03,800 INFO: Response code(s) got per number of requests: {204: 2020}
2026-04-25 23:38:03,806 INFO: Response code(s) got per number of requests: {204: 1977}
2026-04-25 23:38:03,808 INFO: Response code(s) got per number of requests: {204: 1997}
2026-04-25 23:38:03,809 INFO: Response code(s) got per number of requests: {204: 2011}</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:06.957901" elapsed="0.000593"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:06.959708" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_add_people.log"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_add_people.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:38:06.958882" elapsed="0.000950"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>cluster_rest_script_add_people.log</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:06.943396" elapsed="0.016630"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:07.015411" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/people:people?content=config 
 path_url=/rests/data/people:people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:07.019331" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/people:people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;&lt;person&gt;&lt;id&gt;1674&lt;/id&gt;&lt;address&gt;address1674&lt;/address&gt;&lt;contactNo&gt;1674&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1571&lt;/id&gt;&lt;address&gt;address1571&lt;/address&gt;&lt;contactNo&gt;1571&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2044&lt;/id&gt;&lt;address&gt;address2044&lt;/address&gt;&lt;contactNo&gt;2044&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3635&lt;/id&gt;&lt;address&gt;address3635&lt;/address&gt;&lt;contactNo&gt;3635&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3022&lt;/id&gt;&lt;address&gt;address3022&lt;/address&gt;&lt;contactNo&gt;3022&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9453&lt;/id&gt;&lt;address&gt;address9453&lt;/address&gt;&lt;contactNo&gt;9453&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4176&lt;/id&gt;&lt;address&gt;address4176&lt;/address&gt;&lt;contactNo&gt;4176&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2821&lt;/id&gt;&lt;address&gt;address2821&lt;/address&gt;&lt;contactNo&gt;2821&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1665&lt;/id&gt;&lt;address&gt;address1665&lt;/address&gt;&lt;contactNo&gt;1665&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1562&lt;/id&gt;&lt;address&gt;address1562&lt;/address&gt;&lt;contactNo&gt;1562&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2035&lt;/id&gt;&lt;address&gt;address2035&lt;/address&gt;&lt;contactNo&gt;2035&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3622&lt;/id&gt;&lt;address&gt;address3622&lt;/address&gt;&lt;contactNo&gt;3622&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6200&lt;/id&gt;&lt;address&gt;address6200&lt;/address&gt;&lt;contactNo&gt;6200&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3031&lt;/id&gt;&lt;address&gt;address3031&lt;/address&gt;&lt;contactNo&gt;3031&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9462&lt;/id&gt;&lt;address&gt;address9462&lt;/address&gt;&lt;contactNo&gt;9462&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4185&lt;/id&gt;&lt;address&gt;address4185&lt;/address&gt;&lt;contactNo&gt;4185&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1979&lt;/id&gt;&lt;address&gt;address1979&lt;/address&gt;&lt;contactNo&gt;1979&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2062&lt;/id&gt;&lt;address&gt;address2062&lt;/address&gt;&lt;contactNo&gt;2062&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3617&lt;/id&gt;&lt;address&gt;address3617&lt;/address&gt;&lt;contactNo&gt;3617&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7895&lt;/id&gt;&lt;address&gt;address7895&lt;/address&gt;&lt;contactNo&gt;7895&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6213&lt;/id&gt;&lt;address&gt;address6213&lt;/address&gt;&lt;contactNo&gt;6213&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3004&lt;/id&gt;&lt;address&gt;address3004&lt;/address&gt;&lt;contactNo&gt;3004&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2803&lt;/id&gt;&lt;address&gt;address2803&lt;/address&gt;&lt;contactNo&gt;2803&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2053&lt;/id&gt;&lt;address&gt;address2053&lt;/address&gt;&lt;contactNo&gt;2053&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3604&lt;/id&gt;&lt;address&gt;address3604&lt;/address&gt;&lt;contactNo&gt;3604&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7882&lt;/id&gt;&lt;address&gt;address7882&lt;/address&gt;&lt;contactNo&gt;7882&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6226&lt;/id&gt;&lt;address&gt;address6226&lt;/address&gt;&lt;contactNo&gt;6226&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3013&lt;/id&gt;&lt;address&gt;address3013&lt;/address&gt;&lt;contactNo&gt;3013&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6031&lt;/id&gt;&lt;address&gt;address6031&lt;/address&gt;&lt;contactNo&gt;6031&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2954&lt;/id&gt;&lt;address&gt;address2954&lt;/address&gt;&lt;contactNo&gt;2954&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3712&lt;/id&gt;&lt;address&gt;address3712&lt;/address&gt;&lt;contactNo&gt;3712&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3918&lt;/id&gt;&lt;address&gt;address3918&lt;/address&gt;&lt;contactNo&gt;3918&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2009&lt;/id&gt;&lt;address&gt;address2009&lt;/address&gt;&lt;contactNo&gt;2009&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3539&lt;/id&gt;&lt;address&gt;address3539&lt;/address&gt;&lt;contactNo&gt;3539&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2140&lt;/id&gt;&lt;address&gt;address2140&lt;/address&gt;&lt;contactNo&gt;2140&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3670&lt;/id&gt;&lt;address&gt;address3670&lt;/address&gt;&lt;contactNo&gt;3670&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9591&lt;/id&gt;&lt;address&gt;address9591&lt;/address&gt;&lt;contactNo&gt;9591&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6137&lt;/id&gt;&lt;address&gt;address6137&lt;/address&gt;&lt;contactNo&gt;6137&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9786&lt;/id&gt;&lt;address&gt;address9786&lt;/address&gt;&lt;contactNo&gt;9786&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4926&lt;/id&gt;&lt;address&gt;address4926&lt;/address&gt;&lt;contactNo&gt;4926&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6908&lt;/id&gt;&lt;address&gt;address6908&lt;/address&gt;&lt;contactNo&gt;6908&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2967&lt;/id&gt;&lt;address&gt;address2967&lt;/address&gt;&lt;contactNo&gt;2967&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3905&lt;/id&gt;&lt;address&gt;address3905&lt;/address&gt;&lt;contactNo&gt;3905&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3526&lt;/id&gt;&lt;address&gt;address3526&lt;/address&gt;&lt;contactNo&gt;3526&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2131&lt;/id&gt;&lt;address&gt;address2131&lt;/address&gt;&lt;contactNo&gt;2131&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9795&lt;/id&gt;&lt;address&gt;address9795&lt;/address&gt;&lt;contactNo&gt;9795&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4289&lt;/id&gt;&lt;address&gt;address4289&lt;/address&gt;&lt;contactNo&gt;4289&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4913&lt;/id&gt;&lt;address&gt;address4913&lt;/address&gt;&lt;contactNo&gt;4913&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2972&lt;/id&gt;&lt;address&gt;address2972&lt;/address&gt;&lt;contactNo&gt;2972&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1381&lt;/id&gt;&lt;address&gt;address1381&lt;/address&gt;&lt;contactNo&gt;1381&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1598&lt;/id&gt;&lt;address&gt;address1598&lt;/address&gt;&lt;contactNo&gt;1598&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2027&lt;/id&gt;&lt;address&gt;address2027&lt;/address&gt;&lt;contactNo&gt;2027&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3557&lt;/id&gt;&lt;address&gt;address3557&lt;/address&gt;&lt;contactNo&gt;3557&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2122&lt;/id&gt;&lt;address&gt;address2122&lt;/address&gt;&lt;contactNo&gt;2122&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3652&lt;/id&gt;&lt;address&gt;address3652&lt;/address&gt;&lt;contactNo&gt;3652&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4119&lt;/id&gt;&lt;address&gt;address4119&lt;/address&gt;&lt;contactNo&gt;4119&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6111&lt;/id&gt;&lt;address&gt;address6111&lt;/address&gt;&lt;contactNo&gt;6111&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7245&lt;/id&gt;&lt;address&gt;address7245&lt;/address&gt;&lt;contactNo&gt;7245&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4254&lt;/id&gt;&lt;address&gt;address4254&lt;/address&gt;&lt;contactNo&gt;4254&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4900&lt;/id&gt;&lt;address&gt;address4900&lt;/address&gt;&lt;contactNo&gt;4900&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2985&lt;/id&gt;&lt;address&gt;address2985&lt;/address&gt;&lt;contactNo&gt;2985&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1394&lt;/id&gt;&lt;address&gt;address1394&lt;/address&gt;&lt;contactNo&gt;1394&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1589&lt;/id&gt;&lt;address&gt;address1589&lt;/address&gt;&lt;contactNo&gt;1589&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2018&lt;/id&gt;&lt;address&gt;address2018&lt;/address&gt;&lt;contactNo&gt;2018&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3544&lt;/id&gt;&lt;address&gt;address3544&lt;/address&gt;&lt;contactNo&gt;3544&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2113&lt;/id&gt;&lt;address&gt;address2113&lt;/address&gt;&lt;contactNo&gt;2113&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4128&lt;/id&gt;&lt;address&gt;address4128&lt;/address&gt;&lt;contactNo&gt;4128&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6124&lt;/id&gt;&lt;address&gt;address6124&lt;/address&gt;&lt;contactNo&gt;6124&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7254&lt;/id&gt;&lt;address&gt;address7254&lt;/address&gt;&lt;contactNo&gt;7254&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4263&lt;/id&gt;&lt;address&gt;address4263&lt;/address&gt;&lt;contactNo&gt;4263&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6685&lt;/id&gt;&lt;address&gt;address6685&lt;/address&gt;&lt;contactNo&gt;6685&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6490&lt;/id&gt;&lt;address&gt;address6490&lt;/address&gt;&lt;contactNo&gt;6490&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6186&lt;/id&gt;&lt;address&gt;address6186&lt;/address&gt;&lt;contactNo&gt;6186&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7526&lt;/id&gt;&lt;address&gt;address7526&lt;/address&gt;&lt;contactNo&gt;7526&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7423&lt;/id&gt;&lt;address&gt;address7423&lt;/address&gt;&lt;contactNo&gt;7423&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6887&lt;/id&gt;&lt;address&gt;address6887&lt;/address&gt;&lt;contactNo&gt;6887&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;8922&lt;/id&gt;&lt;address&gt;address8922&lt;/address&gt;&lt;contactNo&gt;8922&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2617&lt;/id&gt;&lt;address&gt;address2617&lt;/address&gt;&lt;contactNo&gt;2617&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6672&lt;/id&gt;&lt;address&gt;address6672&lt;/address&gt;&lt;contactNo&gt;6672&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6195&lt;/id&gt;&lt;address&gt;address6195&lt;/address&gt;&lt;contactNo&gt;6195&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7241&lt;/id&gt;&lt;address&gt;address7241&lt;/address&gt;&lt;contactNo&gt;7241&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7539&lt;/id&gt;&lt;address&gt;address7539&lt;/address&gt;&lt;contactNo&gt;7539&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7436&lt;/id&gt;&lt;address&gt;address7436&lt;/address&gt;&lt;contactNo&gt;7436&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6874&lt;/id&gt;&lt;address&gt;address6874&lt;/address&gt;&lt;contactNo&gt;6874&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;493&lt;/id&gt;&lt;address&gt;address493&lt;/address&gt;&lt;contactNo&gt;493&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1208&lt;/id&gt;&lt;address&gt;address1208&lt;/address&gt;&lt;contactNo&gt;1208&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3496&lt;/id&gt;&lt;address&gt;address3496&lt;/address&gt;&lt;contactNo&gt;3496&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9234&lt;/id&gt;&lt;address&gt;address9234&lt;/address&gt;&lt;contactNo&gt;9234&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6160&lt;/id&gt;&lt;address&gt;address6160&lt;/address&gt;&lt;contactNo&gt;6160&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;5405&lt;/id&gt;&lt;address&gt;address5405&lt;/address&gt;&lt;contactNo&gt;5405&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;484&lt;/id&gt;&lt;address&gt;address484&lt;/address&gt;&lt;contactNo&gt;484&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1217&lt;/id&gt;&lt;address&gt;address1217&lt;/address&gt;&lt;contactNo&gt;1217&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;8809&lt;/id&gt;&lt;address&gt;address8809&lt;/address&gt;&lt;contactNo&gt;8809&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6698&lt;/id&gt;&lt;address&gt;address6698&lt;/address&gt;&lt;contactNo&gt;6698&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3487&lt;/id&gt;&lt;address&gt;address3487&lt;/address&gt;&lt;contactNo&gt;3487&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6559&lt;/id&gt;&lt;address&gt;address6559&lt;/address&gt;&lt;contactNo&gt;6559&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9225&lt;/id&gt;&lt;address&gt;address9225&lt;/address&gt;&lt;contactNo&gt;9225&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;5414&lt;/id&gt;&lt;address&gt;address5414&lt;/address&gt;&lt;contactNo&gt;5414&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9782&lt;/id&gt;&lt;address&gt;address9782&lt;/address&gt;&lt;contactNo&gt;9782&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7410&lt;/id&gt;&lt;address&gt;address7410&lt;/address&gt;&lt;contactNo&gt;7410&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6892&lt;/id&gt;&lt;address&gt;address6892&lt;/address&gt;&lt;contactNo&gt;6892&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1911&lt;/id&gt;&lt;address&gt;address1911&lt;/address&gt;&lt;contactNo&gt;1911&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;571&lt;/id&gt;&lt;address&gt;address571&lt;/address&gt;&lt;contactNo&gt;571&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;476&lt;/id&gt;&lt;address&gt;address476&lt;/address&gt;&lt;contactNo&gt;476&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2200&lt;/id&gt;&lt;address&gt;address2200&lt;/address&gt;&lt;contactNo&gt;2200&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3332&lt;/id&gt;&lt;address&gt;address3332&lt;/address&gt;&lt;contactNo&gt;3332&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2347&lt;/id&gt;&lt;address&gt;address2347&lt;/address&gt;&lt;contactNo&gt;2347&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3479&lt;/id&gt;&lt;address&gt;address3479&lt;/address&gt;&lt;contactNo&gt;3479&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9312&lt;/id&gt;&lt;address&gt;address9312&lt;/address&gt;&lt;contactNo&gt;9312&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6350&lt;/id&gt;&lt;address&gt;address6350&lt;/address&gt;&lt;contactNo&gt;6350&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9507&lt;/id&gt;&lt;address&gt;address9507&lt;/address&gt;&lt;contactNo&gt;9507&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9404&lt;/id&gt;&lt;address&gt;address9404&lt;/address&gt;&lt;contactNo&gt;9404&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6035&lt;/id&gt;&lt;address&gt;address6035&lt;/address&gt;&lt;contactNo&gt;6035&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7563&lt;/id&gt;&lt;address&gt;address7563&lt;/address&gt;&lt;contactNo&gt;7563&lt;/contactNo&gt;&lt;/person... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:38:07.019809" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:06.960379" elapsed="0.059470"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:38:07.104135" level="INFO">10000 elements matched 'person'.</msg>
<msg time="2026-04-25T23:38:07.104403" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:38:07.020143" elapsed="0.084301"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:38:07.104836" elapsed="0.000636"/>
</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-25T23:38:07.107242" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:07.106665" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.106629" elapsed="0.000729"/>
</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-25T23:38:07.107548" elapsed="0.000355"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.112690" 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-25T23:38:07.112256" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:07.112945" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-25T23:38:07.112795" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.112776" elapsed="0.000281"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.113198" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:07.113376" elapsed="0.000023"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.113541" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:07.113698" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:07.113854" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.114028" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.114187" elapsed="0.000020"/>
</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-25T23:38:07.111940" elapsed="0.002327"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:07.106370" elapsed="0.007949"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:07.105899" elapsed="0.008462"/>
</kw>
<doc>Store logs and verify result</doc>
<status status="PASS" start="2026-04-25T23:38:04.818590" elapsed="2.295812"/>
</test>
<test id="s1-s1-t5" name="Purchase Cars" line="82">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:07.118670" elapsed="0.000307"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:07.118329" elapsed="0.000728"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:07.120328" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:07.120174" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.120147" elapsed="0.000271"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:07.126870" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:07.126730" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.126706" elapsed="0.000272"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.128151" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:07.127714" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.128633" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:07.128331" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:07.128780" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:38:07.128950" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:07.127275" elapsed="0.001719"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:07.134334" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:07.134221" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.134201" elapsed="0.000203"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:07.135596" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:07.135486" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.135468" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:07.136131" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:07.135802" elapsed="0.000356"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:07.136530" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:07.136308" elapsed="0.000248"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:07.179999" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:07.137045" elapsed="0.043114"/>
</kw>
<msg time="2026-04-25T23:38:07.180364" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:07.180411" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:07.136704" elapsed="0.043746"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:07.212512" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:07.181110" elapsed="0.031550"/>
</kw>
<msg time="2026-04-25T23:38:07.212848" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:07.212894" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:07.180679" elapsed="0.032252"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.213353" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:07.213073" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.213039" elapsed="0.000427"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.213982" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:07.213604" elapsed="0.000449"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.214329" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:07.214122" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.214103" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:07.214447" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:07.217197" elapsed="0.000151"/>
</kw>
<msg time="2026-04-25T23:38:07.217427" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:07.215950" elapsed="0.001619"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.217839" elapsed="0.000327"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.218426" elapsed="0.000194"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:07.215325" elapsed="0.003416"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:07.214751" elapsed="0.004055"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:07.135179" elapsed="0.083803"/>
</kw>
<msg time="2026-04-25T23:38:07.219081" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:07.219126" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:07.134547" elapsed="0.084617"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:07.219358" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:38:07.219243" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.219223" elapsed="0.000226"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.219900" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.220253" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:07.220326" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:07.133861" elapsed="0.086572"/>
</kw>
<msg time="2026-04-25T23:38:07.220528" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:07.220572" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:07.129392" elapsed="0.091217"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:07.220925" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:07.220685" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:07.220668" elapsed="0.000351"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:07.129238" elapsed="0.091805"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:07.129053" elapsed="0.092024"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:07.126258" elapsed="0.094879"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:07.119780" elapsed="0.101415"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:07.119254" elapsed="0.101989"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:07.115579" elapsed="0.105722"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.229276" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 5</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:07.228954" elapsed="0.000372"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:07.232440" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 5</msg>
<msg time="2026-04-25T23:38:07.232535" level="INFO">${output} = python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 5 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:07.229517" elapsed="0.003044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:07.232976" level="INFO">python cluster_rest_script.py --host 10.30.171.86 --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 5 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:07.232710" elapsed="0.000316"/>
</kw>
<arg>${purchasecmd}</arg>
<arg>${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:38:07.228549" elapsed="0.004535"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:38:13.238286" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:38:07,325 INFO: Add 10000 purchase(s) to 10.30.171.86:8181 (1 per request)
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:38:07.237913" elapsed="6.001567">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:38:07,325 INFO: Add 10000 purchase(s) to 10.30.171.86:8181 (1 per request)
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:38:20.241175" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:38:14.240295" elapsed="6.001646">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:38:21.251760" level="INFO">2026-04-25 23:38:21,205 INFO: Response code(s) got per number of requests: {204: 2008}
2026-04-25 23:38:21,207 INFO: Response code(s) got per number of requests: {204: 1996}
2026-04-25 23:38:21,208 INFO: Response code(s) got per number of requests: {204: 1985}
2026-04-25 23:38:21,216 INFO: Response code(s) got per number of requests: {204: 2014}
2026-04-25 23:38:21,217 INFO: Response code(s) got per number of requests: {204: 1997}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:38:21.242732" elapsed="0.009318"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:38:07.237387" elapsed="14.014751"/>
</kw>
<msg time="2026-04-25T23:38:21.252215" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Wait Until Keyword Succeeds</arg>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:07.237021" elapsed="14.015285"/>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit, return the printed output.</doc>
<status status="PASS" start="2026-04-25T23:38:07.236667" elapsed="14.015777"/>
</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-25T23:38:21.254526" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:21.253916" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.253884" elapsed="0.000771"/>
</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-25T23:38:21.254852" elapsed="0.000625"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:21.261349" 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-25T23:38:21.260860" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:21.261612" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:38:21.261457" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.261438" elapsed="0.000263"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.261841" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:21.262020" elapsed="0.000022"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.262184" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:21.262338" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:21.262489" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.262642" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.262792" elapsed="0.000019"/>
</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-25T23:38:21.260555" elapsed="0.002313"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:21.253591" elapsed="0.009327"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:21.252909" elapsed="0.010082"/>
</kw>
<doc>Request to purchase 10000 cars (timeout in 11m).</doc>
<status status="PASS" start="2026-04-25T23:38:07.115068" elapsed="14.147971"/>
</test>
<test id="s1-s1-t6" name="Verify Purchases" line="87">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:21.266227" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:21.265944" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:21.267480" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:21.267367" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.267348" 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-25T23:38:21.272143" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:21.272032" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.272013" elapsed="0.000509"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:21.273638" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:21.273178" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:21.274141" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:21.273820" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:21.274272" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:38:21.274457" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:21.272775" elapsed="0.001713"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:21.279865" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:21.279754" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.279734" elapsed="0.000202"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:21.281184" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:21.281074" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.281055" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:21.281718" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:21.281405" elapsed="0.000340"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:21.282133" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:21.281894" elapsed="0.000265"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:21.321404" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:21.282631" elapsed="0.038892"/>
</kw>
<msg time="2026-04-25T23:38:21.321722" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:21.321769" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:21.282306" elapsed="0.039501"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:21.354330" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:21.322603" elapsed="0.031837"/>
</kw>
<msg time="2026-04-25T23:38:21.354599" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:21.354645" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:21.322121" elapsed="0.032561"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.355023" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:21.354767" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.354743" elapsed="0.000363"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:21.355543" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:21.355240" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.355880" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:21.355678" elapsed="0.000259"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.355660" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:21.356032" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:21.358693" elapsed="0.000145"/>
</kw>
<msg time="2026-04-25T23:38:21.358898" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:21.357566" elapsed="0.001482"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.359309" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.359625" elapsed="0.000072"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:21.356888" elapsed="0.002919"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:21.356343" elapsed="0.003528"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:21.280718" elapsed="0.079324"/>
</kw>
<msg time="2026-04-25T23:38:21.360137" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:21.360182" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:21.280100" elapsed="0.080120"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:21.360407" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:38:21.360297" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.360278" elapsed="0.000212"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.360883" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.361243" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:21.361315" elapsed="0.000052"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:21.279407" elapsed="0.082060"/>
</kw>
<msg time="2026-04-25T23:38:21.361562" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:21.361605" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:21.274865" elapsed="0.086777"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:21.361981" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:21.361718" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:21.361701" elapsed="0.000359"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:21.274733" elapsed="0.087350"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:21.274549" elapsed="0.087569"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:21.271640" elapsed="0.090538"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:21.267067" elapsed="0.095168"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:21.266634" elapsed="0.095648"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:21.263943" elapsed="0.098401"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:21.363437" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:21.363072" elapsed="0.000401"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:21.363645" elapsed="0.001409"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:38:21.362804" elapsed="0.002332"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.366123" level="INFO">handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 755, in add_car_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:38:23.368058" level="INFO">${output} = 
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 755, in add_car_people_rpc
    res = _task_executor(
 ...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:38:21.365318" elapsed="2.002815"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.369267" level="INFO">
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 755, in add_car_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-41487-7-1-mininet-ovs-217-0 ~]&gt; </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:23.368563" elapsed="0.000829"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:38:21.362504" elapsed="2.007025"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.380859" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:38:23.394530" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:38:23.394691" level="INFO">${output_log} = 2026-04-25 23:38:07,325 INFO: Add 10000 purchase(s) to 10.30.171.86:8181 (1 per request)
2026-04-25 23:38:21,205 INFO: Response code(s) got per number of requests: {204: 2008}
2026-04-25 23:38:21,207 ...</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:38:23.380714" elapsed="0.014107"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.395771" level="INFO">2026-04-25 23:38:07,325 INFO: Add 10000 purchase(s) to 10.30.171.86:8181 (1 per request)
2026-04-25 23:38:21,205 INFO: Response code(s) got per number of requests: {204: 2008}
2026-04-25 23:38:21,207 INFO: Response code(s) got per number of requests: {204: 1996}
2026-04-25 23:38:21,208 INFO: Response code(s) got per number of requests: {204: 1985}
2026-04-25 23:38:21,216 INFO: Response code(s) got per number of requests: {204: 2014}
2026-04-25 23:38:21,217 INFO: Response code(s) got per number of requests: {204: 1997}</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:23.395187" elapsed="0.000694"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:23.397081" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_purchase_cars.log"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/cluster_rest_script_purchase_cars.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:38:23.396301" elapsed="0.000908"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>cluster_rest_script_purchase_cars.log</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:23.380368" elapsed="0.016978"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.436027" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.440986" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;9502&lt;/car-id&gt;&lt;person-id&gt;9502&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6265&lt;/car-id&gt;&lt;person-id&gt;6265&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7524&lt;/car-id&gt;&lt;person-id&gt;7524&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9908&lt;/car-id&gt;&lt;person-id&gt;9908&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8915&lt;/car-id&gt;&lt;person-id&gt;8915&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8780&lt;/car-id&gt;&lt;person-id&gt;8780&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7265&lt;/car-id&gt;&lt;person-id&gt;7265&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8128&lt;/car-id&gt;&lt;person-id&gt;8128&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1236&lt;/car-id&gt;&lt;person-id&gt;1236&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9648&lt;/car-id&gt;&lt;person-id&gt;9648&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8509&lt;/car-id&gt;&lt;person-id&gt;8509&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8396&lt;/car-id&gt;&lt;person-id&gt;8396&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7662&lt;/car-id&gt;&lt;person-id&gt;7662&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;900&lt;/car-id&gt;&lt;person-id&gt;900&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1374&lt;/car-id&gt;&lt;person-id&gt;1374&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8026&lt;/car-id&gt;&lt;person-id&gt;8026&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6278&lt;/car-id&gt;&lt;person-id&gt;6278&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7515&lt;/car-id&gt;&lt;person-id&gt;7515&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8902&lt;/car-id&gt;&lt;person-id&gt;8902&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;859&lt;/car-id&gt;&lt;person-id&gt;859&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8793&lt;/car-id&gt;&lt;person-id&gt;8793&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7252&lt;/car-id&gt;&lt;person-id&gt;7252&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1249&lt;/car-id&gt;&lt;person-id&gt;1249&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5003&lt;/car-id&gt;&lt;person-id&gt;5003&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9635&lt;/car-id&gt;&lt;person-id&gt;9635&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8518&lt;/car-id&gt;&lt;person-id&gt;8518&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8240&lt;/car-id&gt;&lt;person-id&gt;8240&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8387&lt;/car-id&gt;&lt;person-id&gt;8387&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7653&lt;/car-id&gt;&lt;person-id&gt;7653&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6132&lt;/car-id&gt;&lt;person-id&gt;6132&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;719&lt;/car-id&gt;&lt;person-id&gt;719&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1387&lt;/car-id&gt;&lt;person-id&gt;1387&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8039&lt;/car-id&gt;&lt;person-id&gt;8039&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5133&lt;/car-id&gt;&lt;person-id&gt;5133&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3159&lt;/car-id&gt;&lt;person-id&gt;3159&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4546&lt;/car-id&gt;&lt;person-id&gt;4546&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1896&lt;/car-id&gt;&lt;person-id&gt;1896&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4407&lt;/car-id&gt;&lt;person-id&gt;4407&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4290&lt;/car-id&gt;&lt;person-id&gt;4290&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2781&lt;/car-id&gt;&lt;person-id&gt;2781&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4709&lt;/car-id&gt;&lt;person-id&gt;4709&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;514&lt;/car-id&gt;&lt;person-id&gt;514&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;653&lt;/car-id&gt;&lt;person-id&gt;653&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3343&lt;/car-id&gt;&lt;person-id&gt;3343&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2095&lt;/car-id&gt;&lt;person-id&gt;2095&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2190&lt;/car-id&gt;&lt;person-id&gt;2190&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5279&lt;/car-id&gt;&lt;person-id&gt;5279&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3019&lt;/car-id&gt;&lt;person-id&gt;3019&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3297&lt;/car-id&gt;&lt;person-id&gt;3297&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1617&lt;/car-id&gt;&lt;person-id&gt;1617&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5925&lt;/car-id&gt;&lt;person-id&gt;5925&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2685&lt;/car-id&gt;&lt;person-id&gt;2685&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3867&lt;/car-id&gt;&lt;person-id&gt;3867&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2395&lt;/car-id&gt;&lt;person-id&gt;2395&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7910&lt;/car-id&gt;&lt;person-id&gt;7910&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3645&lt;/car-id&gt;&lt;person-id&gt;3645&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;254&lt;/car-id&gt;&lt;person-id&gt;254&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5146&lt;/car-id&gt;&lt;person-id&gt;5146&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3168&lt;/car-id&gt;&lt;person-id&gt;3168&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4559&lt;/car-id&gt;&lt;person-id&gt;4559&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2790&lt;/car-id&gt;&lt;person-id&gt;2790&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;505&lt;/car-id&gt;&lt;person-id&gt;505&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;644&lt;/car-id&gt;&lt;person-id&gt;644&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3334&lt;/car-id&gt;&lt;person-id&gt;3334&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2288&lt;/car-id&gt;&lt;person-id&gt;2288&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2082&lt;/car-id&gt;&lt;person-id&gt;2082&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6531&lt;/car-id&gt;&lt;person-id&gt;6531&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3028&lt;/car-id&gt;&lt;person-id&gt;3028&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5916&lt;/car-id&gt;&lt;person-id&gt;5916&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1761&lt;/car-id&gt;&lt;person-id&gt;1761&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4911&lt;/car-id&gt;&lt;person-id&gt;4911&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2694&lt;/car-id&gt;&lt;person-id&gt;2694&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5997&lt;/car-id&gt;&lt;person-id&gt;5997&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3854&lt;/car-id&gt;&lt;person-id&gt;3854&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3957&lt;/car-id&gt;&lt;person-id&gt;3957&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7796&lt;/car-id&gt;&lt;person-id&gt;7796&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6671&lt;/car-id&gt;&lt;person-id&gt;6671&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3430&lt;/car-id&gt;&lt;person-id&gt;3430&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2382&lt;/car-id&gt;&lt;person-id&gt;2382&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3636&lt;/car-id&gt;&lt;person-id&gt;3636&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;241&lt;/car-id&gt;&lt;person-id&gt;241&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5297&lt;/car-id&gt;&lt;person-id&gt;5297&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3235&lt;/car-id&gt;&lt;person-id&gt;3235&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1877&lt;/car-id&gt;&lt;person-id&gt;1877&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1972&lt;/car-id&gt;&lt;person-id&gt;1972&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5794&lt;/car-id&gt;&lt;person-id&gt;5794&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2425&lt;/car-id&gt;&lt;person-id&gt;2425&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;575&lt;/car-id&gt;&lt;person-id&gt;575&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;678&lt;/car-id&gt;&lt;person-id&gt;678&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6952&lt;/car-id&gt;&lt;person-id&gt;6952&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6648&lt;/car-id&gt;&lt;person-id&gt;6648&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3421&lt;/car-id&gt;&lt;person-id&gt;3421&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2401&lt;/car-id&gt;&lt;person-id&gt;2401&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6442&lt;/car-id&gt;&lt;person-id&gt;6442&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2171&lt;/car-id&gt;&lt;person-id&gt;2171&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;283&lt;/car-id&gt;&lt;person-id&gt;283&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5393&lt;/car-id&gt;&lt;person-id&gt;5393&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3133&lt;/car-id&gt;&lt;person-id&gt;3133&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5692&lt;/car-id&gt;&lt;person-id&gt;5692&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5898&lt;/car-id&gt;&lt;person-id&gt;5898&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1672&lt;/car-id&gt;&lt;person-id&gt;1672&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4925&lt;/car-id&gt;&lt;person-id&gt;4925&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3804&lt;/car-id&gt;&lt;person-id&gt;3804&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3943&lt;/car-id&gt;&lt;person-id&gt;3943&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3567&lt;/car-id&gt;&lt;person-id&gt;3567&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;178&lt;/car-id&gt;&lt;person-id&gt;178&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6544&lt;/car-id&gt;&lt;person-id&gt;6544&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3244&lt;/car-id&gt;&lt;person-id&gt;3244&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1985&lt;/car-id&gt;&lt;person-id&gt;1985&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2434&lt;/car-id&gt;&lt;person-id&gt;2434&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;566&lt;/car-id&gt;&lt;person-id&gt;566&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4689&lt;/car-id&gt;&lt;person-id&gt;4689&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;669&lt;/car-id&gt;&lt;person-id&gt;669&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6943&lt;/car-id&gt;&lt;person-id&gt;6943&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7703&lt;/car-id&gt;&lt;person-id&gt;7703&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3412&lt;/car-id&gt;&lt;person-id&gt;3412&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7806&lt;/car-id&gt;&lt;person-id&gt;7806&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2414&lt;/car-id&gt;&lt;person-id&gt;2414&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6455&lt;/car-id&gt;&lt;person-id&gt;6455&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3690&lt;/car-id&gt;&lt;person-id&gt;3690&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;270&lt;/car-id&gt;&lt;person-id&gt;270&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3142&lt;/car-id&gt;&lt;person-id&gt;3142&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1685&lt;/car-id&gt;&lt;person-id&gt;1685&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4938&lt;/car-id&gt;&lt;person-id&gt;4938&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3930&lt;/car-id&gt;&lt;person-id&gt;3930&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2800&lt;/car-id&gt;&lt;person-id&gt;2800&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3558&lt;/car-id&gt;&lt;person-id&gt;3558&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2028&lt;/car-id&gt;&lt;person-id&gt;2028&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;165&lt;/car-id&gt;&lt;person-id&gt;165&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6557&lt;/car-id&gt;&lt;person-id&gt;6557&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9666&lt;/car-id&gt;&lt;person-id&gt;9666&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6343&lt;/car-id&gt;&lt;person-id&gt;6343&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;7600&lt;/car-id&gt;&lt;person-id&gt;7600&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9969&lt;/car-id&gt;&lt;person-id&gt;9969&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9042&lt;/car-id&gt;&lt;person-id&gt;9042&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1158&lt;/car-id&gt;&lt;person-id&gt;1158&lt;/person-id&gt;&lt;/car-person&gt;&lt;ca... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:38:23.441415" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.399740" elapsed="0.041714"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:38:23.538704" level="INFO">10000 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:38:23.538921" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:38:23.441696" elapsed="0.097254"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:38:23.539264" elapsed="0.000451"/>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="PASS" start="2026-04-25T23:38:23.399044" elapsed="0.140744"/>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<arg>1</arg>
<arg>Purchase Is Completed</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:38:23.397733" elapsed="0.142108"/>
</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-25T23:38:23.541192" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.540769" elapsed="0.000488"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.540745" elapsed="0.000539"/>
</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-25T23:38:23.541423" elapsed="0.000324"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.546436" 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-25T23:38:23.546019" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:23.546718" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.546567" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.546547" elapsed="0.000265"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.546951" elapsed="0.000042"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:23.547134" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.547295" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.547451" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.547605" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.547758" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.547915" elapsed="0.000020"/>
</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-25T23:38:23.545697" elapsed="0.002311"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:23.540547" elapsed="0.007513"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:23.540165" elapsed="0.007937"/>
</kw>
<doc>Store logs and verify result</doc>
<status status="PASS" start="2026-04-25T23:38:21.263448" elapsed="2.284693"/>
</test>
<test id="s1-s1-t7" name="Delete Cars" line="93">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:23.551236" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:23.550984" elapsed="0.000517"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.552456" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.552347" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.552329" elapsed="0.000193"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.557175" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.557069" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.557051" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.558212" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:23.557816" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.558763" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:23.558446" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:23.558834" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:23.559006" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:23.557454" elapsed="0.001578"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.564100" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.563993" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.563973" elapsed="0.000193"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.565285" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.565179" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.565161" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:23.565784" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:23.565485" elapsed="0.000326"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.566189" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.565973" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.609544" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:23.566693" elapsed="0.042959"/>
</kw>
<msg time="2026-04-25T23:38:23.609832" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:23.609879" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.566359" elapsed="0.043557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.643267" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:23.610448" elapsed="0.032924"/>
</kw>
<msg time="2026-04-25T23:38:23.643531" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:23.643576" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.610113" elapsed="0.033500"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.643923" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.643692" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.643671" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.644469" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:23.644165" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.644804" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.644602" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.644584" elapsed="0.000296"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:23.644913" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.647542" elapsed="0.000145"/>
</kw>
<msg time="2026-04-25T23:38:23.647747" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:23.646334" elapsed="0.001544"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.648169" elapsed="0.000074"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.648487" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:23.645721" elapsed="0.003000"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:23.645200" elapsed="0.003589"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:23.564855" elapsed="0.084033"/>
</kw>
<msg time="2026-04-25T23:38:23.649002" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.649047" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.564303" elapsed="0.084781"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:23.649269" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.649161" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.649142" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.649733" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.650080" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.650154" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:23.563649" elapsed="0.086613"/>
</kw>
<msg time="2026-04-25T23:38:23.650354" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.650398" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.559397" elapsed="0.091039"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.650780" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.650510" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.650493" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:23.559266" elapsed="0.091615"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:23.559089" elapsed="0.091822"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:23.556690" elapsed="0.094293"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:23.552060" elapsed="0.098982"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.551637" elapsed="0.099451"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:23.549004" elapsed="0.102137"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.659242" level="INFO">DELETE Request : url=http://10.30.171.86:8181/rests/data/car:cars 
 path_url=/rests/data/car:cars 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.659291" level="INFO">DELETE Response : url=http://10.30.171.86:8181/rests/data/car:cars 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.659389" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.651289" elapsed="0.008126"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.675449" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.676084" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/car:cars?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:38:23.676321" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.659574" elapsed="0.016806"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:38:23.676759" elapsed="0.005235"/>
</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-25T23:38:23.684811" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.683996" elapsed="0.000952"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.683925" elapsed="0.001113"/>
</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-25T23:38:23.685342" elapsed="0.000732"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.691179" 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-25T23:38:23.690749" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:23.691422" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.691280" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.691262" elapsed="0.000241"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.691639" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:23.691798" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.691973" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.693099" elapsed="0.000023"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.693261" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.693415" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.693568" elapsed="0.000019"/>
</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-25T23:38:23.690442" elapsed="0.003200"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:23.683414" elapsed="0.010278"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:23.682582" elapsed="0.011151"/>
</kw>
<doc>Remove cars from the datastore</doc>
<status status="PASS" start="2026-04-25T23:38:23.548518" elapsed="0.145255"/>
</test>
<test id="s1-s1-t8" name="Delete People" line="99">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:23.697068" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:23.696797" elapsed="0.000536"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.698284" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.698175" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.698156" elapsed="0.000194"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.702849" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.702743" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.702725" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.703882" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:23.703503" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.704369" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:23.704073" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:23.704439" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:38:23.704592" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:23.703144" elapsed="0.001472"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.709838" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.709731" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.709712" elapsed="0.000233"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.711105" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.710994" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.710953" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:23.711603" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:23.711305" elapsed="0.000324"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.712017" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.711776" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.754468" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:23.712510" elapsed="0.042086"/>
</kw>
<msg time="2026-04-25T23:38:23.754818" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:23.754864" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.712192" elapsed="0.042709"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.788220" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:23.755494" elapsed="0.032830"/>
</kw>
<msg time="2026-04-25T23:38:23.788479" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:23.788525" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.755127" elapsed="0.033435"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.788867" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.788646" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.788622" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.789403" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:23.789103" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.789741" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.789538" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.789520" elapsed="0.000299"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:23.789852" elapsed="0.000035"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.792458" elapsed="0.000145"/>
</kw>
<msg time="2026-04-25T23:38:23.792663" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:23.791366" elapsed="0.001426"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.793074" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.793392" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:23.790751" elapsed="0.002823"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:23.790193" elapsed="0.003445"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:23.710672" elapsed="0.083064"/>
</kw>
<msg time="2026-04-25T23:38:23.793828" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.793872" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.710102" elapsed="0.083807"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:23.794108" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.794000" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.793980" elapsed="0.000251"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.794619" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.794999" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.795073" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:23.709397" elapsed="0.085782"/>
</kw>
<msg time="2026-04-25T23:38:23.795271" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.795315" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.704990" elapsed="0.090364"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.795668" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.795429" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.795412" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:23.704845" elapsed="0.090923"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:23.704671" elapsed="0.091129"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:23.702371" elapsed="0.093484"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:23.697876" elapsed="0.098034"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.697470" elapsed="0.098485"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:23.694564" elapsed="0.101463"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.802841" level="INFO">DELETE Request : url=http://10.30.171.86:8181/rests/data/people:people 
 path_url=/rests/data/people:people 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.802887" level="INFO">DELETE Response : url=http://10.30.171.86:8181/rests/data/people:people 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.803050" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.796184" elapsed="0.006893"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.808034" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/people:people?content=config 
 path_url=/rests/data/people:people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.808221" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/people:people?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:38:23.808365" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.803237" elapsed="0.005165"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:38:23.808641" elapsed="0.003208"/>
</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-25T23:38:23.813705" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.813200" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.813174" elapsed="0.000652"/>
</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-25T23:38:23.814034" elapsed="0.000435"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.821240" 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-25T23:38:23.820653" elapsed="0.000625"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:23.821632" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.821430" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.821404" elapsed="0.000339"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.821931" elapsed="0.000052"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:23.822179" elapsed="0.000030"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.822400" elapsed="0.000028"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.822614" elapsed="0.000028"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.822875" elapsed="0.000036"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.823087" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.823239" elapsed="0.000020"/>
</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-25T23:38:23.820245" elapsed="0.003072"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:23.812721" elapsed="0.010645"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:23.812245" elapsed="0.011162"/>
</kw>
<doc>Remove people from the datastore</doc>
<status status="PASS" start="2026-04-25T23:38:23.694086" elapsed="0.129363"/>
</test>
<test id="s1-s1-t9" name="Delete CarPeople" line="105">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:38:23.826462" elapsed="0.000224"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:23.826218" elapsed="0.000523"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.827684" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.827576" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.827558" elapsed="0.000191"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.832270" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.832165" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.832147" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.833311" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:23.832912" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.833781" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:23.833486" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:23.833850" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:23.834023" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:23.832549" elapsed="0.001499"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.840166" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.840056" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.840036" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.841358" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:23.841252" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.841234" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:23.841849" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:23.841555" elapsed="0.000321"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.842250" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.842039" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.882722" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:23.842764" elapsed="0.040362"/>
</kw>
<msg time="2026-04-25T23:38:23.883568" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:23.883676" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.842426" elapsed="0.041335"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:23.917315" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:23.885159" elapsed="0.032566"/>
</kw>
<msg time="2026-04-25T23:38:23.918219" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:23.918326" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.884257" elapsed="0.034156"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.919296" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.918637" elapsed="0.000793"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.918569" elapsed="0.000919"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.920595" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:23.919789" elapsed="0.000962"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.921389" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.920900" elapsed="0.000610"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.920859" elapsed="0.000703"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:23.921641" elapsed="0.000077"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:23.925788" elapsed="0.000152"/>
</kw>
<msg time="2026-04-25T23:38:23.926016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:23.924505" elapsed="0.001648"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.926420" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.926826" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:23.923743" elapsed="0.003465"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:23.922327" elapsed="0.004951"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:23.840937" elapsed="0.086445"/>
</kw>
<msg time="2026-04-25T23:38:23.927482" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.927527" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.840375" elapsed="0.087194"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:23.927757" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.927648" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.927629" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.928260" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.928594" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:23.928705" elapsed="0.000019"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:23.839697" elapsed="0.089126"/>
</kw>
<msg time="2026-04-25T23:38:23.928923" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:23.928987" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.834406" elapsed="0.094691"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.929421" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.929180" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.929162" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:23.834277" elapsed="0.095246"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:23.834102" elapsed="0.095458"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:23.831795" elapsed="0.097828"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:23.827293" elapsed="0.102388"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:23.826875" elapsed="0.102855"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:23.824241" elapsed="0.105544"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.936317" level="INFO">DELETE Request : url=http://10.30.171.86:8181/rests/data/car-people:car-people 
 path_url=/rests/data/car-people:car-people 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.936367" level="INFO">DELETE Response : url=http://10.30.171.86:8181/rests/data/car-people:car-people 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.936484" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.929953" elapsed="0.006558"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.941503" level="INFO">GET Request : url=http://10.30.171.86:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01b0ipuve566jl1kugjxe5ucyib1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:23.941645" level="INFO">GET Response : url=http://10.30.171.86:8181/rests/data/car-people:car-people?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:38:23.941748" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:38:23.936670" elapsed="0.005105"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:38:23.941952" elapsed="0.002662"/>
</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-25T23:38:23.945834" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:23.945467" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.945449" elapsed="0.000477"/>
</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-25T23:38:23.946078" elapsed="0.000316"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:23.951073" 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-25T23:38:23.950609" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:38:23.951317" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:38:23.951173" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:23.951155" elapsed="0.000242"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.951532" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:38:23.951691" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.951849" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.952020" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:38:23.952215" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.952371" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:23.952522" elapsed="0.000019"/>
</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-25T23:38:23.950318" elapsed="0.002279"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:23.945261" elapsed="0.007384"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:38:23.944889" elapsed="0.007797"/>
</kw>
<doc>Remove car-people entries from the datastore</doc>
<status status="PASS" start="2026-04-25T23:38:23.823747" elapsed="0.128977"/>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-25T23:38:23.953593" elapsed="0.000521"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:23.954333" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T23:38:23.954259" elapsed="0.000162"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-25T23:38:23.953391" elapsed="0.001080"/>
</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="PASS" start="2026-04-25T23:37:00.224036" elapsed="83.730466"/>
</suite>
<suite id="s1-s2" name="Noloss Rate 1Node" source="/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:38:24.087376" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:38:24.083282" elapsed="0.004151"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T23:38:24.083054" elapsed="0.004453"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.092401" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-25T23:38:24.088571" elapsed="0.003859"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T23:38:24.092624" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.092514" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.092491" elapsed="0.000202"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.093198" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:38:24.092839" elapsed="0.000402"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.093702" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-25T23:38:24.093396" elapsed="0.000332"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-25T23:38:24.094255" elapsed="0.000284"/>
</kw>
<msg time="2026-04-25T23:38:24.094636" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:24.094683" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.093889" elapsed="0.000817"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.095283" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:24.094898" elapsed="0.000411"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.096402" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:24.096139" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.096822" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:24.096571" elapsed="0.000277"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.097306" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.097020" elapsed="0.000313"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.100321" elapsed="0.000211"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.101028" level="INFO">${member_ip} = 10.30.171.86</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:24.100685" elapsed="0.000370"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.101256" elapsed="0.000234"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.102277" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:24.101982" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:38:24.102349" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:38:24.102507" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:38:24.101680" elapsed="0.000852"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:38:24.103170" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.86:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7b9e0ca3c490&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:38:24.102684" elapsed="0.000858"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.103703" elapsed="0.000196"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-25T23:38:24.099759" elapsed="0.004216"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:24.099575" elapsed="0.004446"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-25T23:38:24.097393" elapsed="0.006661"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.104598" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:38:24.104215" elapsed="0.000427"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.105193" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.86'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:38:24.104799" elapsed="0.000438"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.105757" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:38:24.105394" elapsed="0.000406"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-25T23:38:24.095682" elapsed="0.010174"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-25T23:38:24.088237" elapsed="0.017674"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.106103" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.105990" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.105970" elapsed="0.000199"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.109151" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:24.108763" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.109618" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:24.109329" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:24.109686" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:38:24.109837" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:24.108449" elapsed="0.001412"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:24.110842" level="INFO">${member_ip} = 10.30.171.86</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.110560" elapsed="0.000310"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.111602" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.111437" elapsed="0.000291"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:24.114363" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:24.114056" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.114038" elapsed="0.000522"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.114853" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.114702" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.116108" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.86" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:24.115180" elapsed="0.000975"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.116943" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.116307" elapsed="0.000678"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.118859" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:38:24.119093" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-25T23:38:24.117700" elapsed="0.001442"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.119420" elapsed="0.000622"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.121516" level="INFO">Logging into '10.30.171.86:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:38:24.705424" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

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

  System load:  1.97               Processes:             128
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 14%                IPv4 address for ens3: 10.30.171.86
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Apr 25 23:37:01 2026 from 10.30.170.219
[?2004h[jenkins@releng-41487-7-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-25T23:38:24.121123" elapsed="0.584523"/>
</kw>
<msg time="2026-04-25T23:38:24.705754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.120358" elapsed="0.585568"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:38:24.117194" elapsed="0.589004"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.706763" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:38:24.719596" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:38:24.720032" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:38:24.720150" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:38:24.706443" elapsed="0.013767"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.720607" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.722861" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:24.721641" elapsed="0.001369"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.723587" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.723226" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.723146" elapsed="0.000609"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:38:24.724216" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-25T23:38:24.723883" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.723846" elapsed="0.000569"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.724493" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.731454" elapsed="0.001023"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.732759" elapsed="0.000442"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.733385" elapsed="0.000189"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:24.725273" elapsed="0.008383"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-25T23:38:24.113558" elapsed="0.620193"/>
</kw>
<msg time="2026-04-25T23:38:24.733805" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.112895" elapsed="0.620963"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:38:24.112423" elapsed="0.621518"/>
</kw>
<msg time="2026-04-25T23:38:24.734000" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.111877" elapsed="0.622172"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.736743" elapsed="0.000322"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.737246" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.737556" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:24.734334" elapsed="0.003367"/>
</kw>
<msg time="2026-04-25T23:38:24.737791" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:38:24.111095" elapsed="0.626721"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.738313" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:24.738066" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:38:24.738397" elapsed="0.000029"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:38:24.110219" elapsed="0.628299"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:24.110050" elapsed="0.628504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:24.109910" elapsed="0.628681"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:38:24.106381" elapsed="0.632267"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-25T23:38:24.738801" elapsed="0.000224"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.752369" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.752260" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.752241" elapsed="0.000194"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.752717" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.752583" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.753269" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:24.753010" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.753701" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:24.753459" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:24.754488" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:38:24.754265" elapsed="0.000335">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-25T23:38:24.754703" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:38:24.754747" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.753896" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:24.755126" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:24.754883" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.754863" elapsed="0.000396"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:24.756002" level="INFO">${ip_address} = 10.30.171.86</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.755722" elapsed="0.000307"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:38:24.756076" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:24.756225" level="INFO">${odl_ip} = 10.30.171.86</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:38:24.755457" elapsed="0.000792"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.756396" elapsed="0.000405"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.757088" level="INFO">index=4
host=10.30.171.86
alias=None
port=8101
timeout=10 seconds
newline=

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

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.759752" elapsed="0.172790"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:24.936222" elapsed="0.000307"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.936687" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.937005" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:24.933641" elapsed="0.003518"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:24.932932" elapsed="0.004274"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:38:24.751983" elapsed="0.185273"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:38:24.739756" elapsed="0.197548"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.739396" elapsed="0.197960"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:24.739258" elapsed="0.198138"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-25T23:38:24.739084" elapsed="0.198349"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T23:38:24.087788" elapsed="0.849707"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.940071" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.939937" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.939911" elapsed="0.000231"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.944803" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.944628" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.944611" elapsed="0.000269"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.945837" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:24.945445" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:24.946334" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:24.946039" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:24.946403" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:38:24.946566" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:24.945120" elapsed="0.001470"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.951721" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.951615" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.951596" elapsed="0.000192"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:24.952799" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:24.952694" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:24.952677" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:24.953316" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:24.953026" elapsed="0.000317"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.953685" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:24.953494" elapsed="0.000216"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:24.996799" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:24.954208" elapsed="0.042773"/>
</kw>
<msg time="2026-04-25T23:38:24.997126" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:24.997183" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.953862" elapsed="0.043366"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:25.072032" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "r "o "l "l "e "r "/ "d "o "m "_ "n "[78Co "[A[78Ct
 "i "f "i "c "a "t "i "o "n "_ "b "r "o "k "e "r "/ "n "o "l "o "s "s "_ "r "a "t "e "_ "1 "n "o "d "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:24.997784" elapsed="0.074444"/>
</kw>
<msg time="2026-04-25T23:38:25.072335" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:25.072379" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.997425" elapsed="0.074990"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.072765" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.072513" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.072483" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.073312" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "r "o "l "l "e "r "/ "d "o "m "_ "n "[78Co "[A[78Ct
 "i "f "i "c "a "t "i "o "n "_ "b "r "o "k "e "r "/ "n "o "l "o "s "s "_ "r "a "t "e "_ "1 "n "o "d "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.073014" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.073677" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.073469" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.073451" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:25.073790" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.075499" elapsed="0.000625"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.076429" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:25.077193" elapsed="0.000200"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:25.074952" elapsed="0.002582"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:25.074118" elapsed="0.003466"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:24.952448" elapsed="0.125234"/>
</kw>
<msg time="2026-04-25T23:38:25.077774" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.077819" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.951932" elapsed="0.125923"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:25.078063" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.077932" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.077913" elapsed="0.000234"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.078545" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.078873" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.078943" elapsed="0.000037"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:24.951328" elapsed="0.127754"/>
</kw>
<msg time="2026-04-25T23:38:25.079177" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.079222" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "1 "n "o "d "e "- "r "e "s "t "- "c "a "r "s "- "p "e "r "f "- "a "l "l "- "c "h "r "o ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.946977" elapsed="0.132284"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.079621" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.079335" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.079318" elapsed="0.000382"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:24.946826" elapsed="0.132897"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:24.946649" elapsed="0.133107"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:24.944338" elapsed="0.135473"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T23:38:24.938092" elapsed="0.141775"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:24.937647" elapsed="0.142262"/>
</kw>
<arg>http_timeout=125</arg>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-25T23:38:24.082637" elapsed="0.997341"/>
</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-25T23:38:25.083047" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:38:25.082756" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.084314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.084206" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.084187" elapsed="0.000194"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.089198" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.089091" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.089071" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.090272" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.089850" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.090751" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:25.090455" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:38:25.090859" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:38:25.091045" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.089481" elapsed="0.001590"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.096630" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.096522" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.096503" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.097901" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.097795" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.097776" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:25.098439" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.098135" elapsed="0.000330"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:38:25.098832" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:38:25.098618" elapsed="0.000239"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:38:25.143166" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:38:25.099430" elapsed="0.043841"/>
</kw>
<msg time="2026-04-25T23:38:25.143458" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:38:25.143505" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.099042" elapsed="0.044500"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:38:25.202342" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "5 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:38:25.144066" elapsed="0.058417"/>
</kw>
<msg time="2026-04-25T23:38:25.202662" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:38:25.202708" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.143708" elapsed="0.059037"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.203126" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.202835" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.202810" elapsed="0.000403"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.203724" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "5 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.203351" elapsed="0.000442"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.204096" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.203860" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.203842" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:38:25.204210" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.205679" elapsed="0.000828"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.206790" elapsed="0.000512"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:38:25.207602" elapsed="0.000403"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:38:25.205051" elapsed="0.003061"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:38:25.204500" elapsed="0.003677"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:38:25.097492" elapsed="0.110784"/>
</kw>
<msg time="2026-04-25T23:38:25.208426" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.208471" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.096847" elapsed="0.111662"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:25.208694" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.208586" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.208568" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.209211" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.209546" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.209617" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:38:25.096178" elapsed="0.113547"/>
</kw>
<msg time="2026-04-25T23:38:25.209820" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.209863" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.091466" elapsed="0.118433"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.210237" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.209989" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.209970" elapsed="0.000345"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:25.091300" elapsed="0.119038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:38:25.091127" elapsed="0.119243"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:38:25.088640" elapsed="0.121786"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:38:25.083889" elapsed="0.126592"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.083482" elapsed="0.127044"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:38:25.080662" elapsed="0.129918"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.217539" 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-25T23:38:25.217239" elapsed="0.000346"/>
</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-25T23:38:25.218624" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.218835" 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-25T23:38:25.218399" elapsed="0.000461"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.223601" 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-25T23:38:25.219052" elapsed="0.004596"/>
</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-25T23:38:25.224082" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.224294" 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-25T23:38:25.223829" elapsed="0.000490"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.228828" 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-25T23:38:25.224480" elapsed="0.004395"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.218116" elapsed="0.010820"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-25T23:38:25.217779" elapsed="0.011226"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.230899" 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-25T23:38:25.229152" elapsed="0.001776"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.231816" 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-25T23:38:25.231464" elapsed="0.000380"/>
</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-25T23:38:25.236391" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.236092" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:38:25.236465" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:38:25.236611" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:38:25.235730" elapsed="0.000905"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.237203" 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-25T23:38:25.236793" elapsed="0.000437"/>
</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-25T23:38:25.270247" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.269850" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.271179" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.270757" elapsed="0.000510">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.271365" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.270431" elapsed="0.000957"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.271983" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:38:25.271583" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.272309" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.272481" 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-25T23:38:25.272168" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.272900" 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-25T23:38:25.272657" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.274132" 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-25T23:38:25.273634" elapsed="0.000543"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.274746" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.274333" elapsed="0.000438"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.275908" 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-25T23:38:25.275194" elapsed="0.000756"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:38:25.277699" 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-25T23:38:25.277242" elapsed="0.000494"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:38:25.277814" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:38:25.278175" 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-25T23:38:25.276425" elapsed="0.001790"/>
</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-25T23:38:25.278439" elapsed="0.000575"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:38:25.275019" elapsed="0.004103"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.274818" elapsed="0.004342"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.279203" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:38:25.279362" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:38:25.273319" elapsed="0.006068"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.273029" elapsed="0.006392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.279632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.279479" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.273009" elapsed="0.006700"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.280353" 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-25T23:38:25.279883" elapsed="0.000497"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.280429" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.269228" elapsed="0.011325"/>
</kw>
<msg time="2026-04-25T23:38:25.280607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.257006" elapsed="0.023651"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.292951" elapsed="0.000044"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.308441" elapsed="0.000040"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.322406" 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-25T23:38:25.322596" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.322765" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.323146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.323002" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.322986" 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-25T23:38:25.323357" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.323548" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.323710" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.322939" elapsed="0.000823"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.322839" elapsed="0.000948"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.323926" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.324017" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:38:25.324128" 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-25T23:38:25.252713" elapsed="0.071440"/>
</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-25T23:38:25.347670" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:38:25.347267" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.348486" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:38:25.348196" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.348643" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.347855" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.349226" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:38:25.348823" elapsed="0.000429"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.349540" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.349669" 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-25T23:38:25.349406" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.350104" 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-25T23:38:25.349844" elapsed="0.000306"/>
</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-25T23:38:25.350501" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.350215" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.351029" 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-25T23:38:25.350721" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.350583" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.350196" elapsed="0.000914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.357428" 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-25T23:38:25.351248" elapsed="0.006210"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.357508" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.346648" elapsed="0.010987"/>
</kw>
<msg time="2026-04-25T23:38:25.357688" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.334679" elapsed="0.023057"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.369744" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.381476" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.393240" 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-25T23:38:25.393430" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.393596" 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-25T23:38:25.393953" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.393811" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.393795" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.394181" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.394339" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.394495" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.393768" elapsed="0.000779"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.393668" elapsed="0.000903"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.394706" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.394779" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.394894" 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-25T23:38:25.333837" elapsed="0.061084"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.396211" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:38:25.395947" elapsed="0.000329">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.396369" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.395610" elapsed="0.000782"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.396699" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.396461" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.397247" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.396943" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.396778" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.396442" elapsed="0.000885"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.399573" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.397470" elapsed="0.002128"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:38:25.399648" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:38:25.399798" 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-chromium/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-25T23:38:25.395262" elapsed="0.004560"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.401324" 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-25T23:38:25.401080" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.401785" 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-25T23:38:25.401515" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.402226" 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-25T23:38:25.401988" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.402645" 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-25T23:38:25.402412" elapsed="0.000275"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:25.403498" 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-25T23:38:25.403292" elapsed="0.000259"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:38:25.403875" 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-25T23:38:25.403701" elapsed="0.000199"/>
</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-25T23:38:25.404059" elapsed="0.000199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.404654" 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-25T23:38:25.404412" elapsed="0.000285"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:38:25.404738" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.404891" 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-25T23:38:25.402879" elapsed="0.002036"/>
</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-25T23:38:25.426511" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:38:25.426562" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={'Set-Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:38:25 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT'} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:25.426654" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:38:25.407179" elapsed="0.019501"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.405000" elapsed="0.021724"/>
</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-25T23:38:25.426901" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.426751" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.404981" elapsed="0.022026"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.430270" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.428048" elapsed="0.002265"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.427812" elapsed="0.002536"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.427794" elapsed="0.002579"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.432915" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.430638" elapsed="0.002336"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.430427" elapsed="0.002582"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.430411" elapsed="0.002623"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.433609" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.433190" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.433934" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.433706" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.434680" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.434383" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.434031" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.433687" elapsed="0.001075"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.435295" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.434914" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.435642" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.435391" elapsed="0.000347"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.436388" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.435923" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.435765" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.435373" elapsed="0.001100"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.436615" elapsed="0.000361"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:38:25.437535" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.437136" elapsed="0.000426"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.437712" elapsed="0.002386"/>
</kw>
<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="PASS" start="2026-04-25T23:38:25.427354" elapsed="0.012806"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:38:25.440339" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.440233" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.440214" elapsed="0.000211"/>
</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-25T23:38:25.440566" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.440634" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.442782" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:38:25.400154" elapsed="0.042654"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.442877" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:38:25.443041" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:38:25.241897" elapsed="0.201168"/>
</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-25T23:38:25.443396" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.443167" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.443150" elapsed="0.000337"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.443520" elapsed="0.000041"/>
</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="PASS" start="2026-04-25T23:38:25.237480" elapsed="0.206183"/>
</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="PASS" start="2026-04-25T23:38:25.235241" elapsed="0.208483"/>
</kw>
<var name="${suffix}">5000</var>
<status status="PASS" start="2026-04-25T23:38:25.231295" elapsed="0.212463"/>
</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="PASS" start="2026-04-25T23:38:25.231026" elapsed="0.212762"/>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.444265" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-25T23:38:25.443941" elapsed="0.000350"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.445874" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.445583" elapsed="0.000317"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:38:25.445944" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T23:38:25.446105" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:38:25.445251" elapsed="0.000878"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.446768" level="INFO">&amp;{mapping} = { ID=working-pair-1 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.446281" elapsed="0.000514"/>
</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-25T23:38:25.480062" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.479669" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.480884" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.480569" elapsed="0.000381">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.481061" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.480248" elapsed="0.000837"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.481622" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.481242" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.481938" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.482092" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:38:25.481803" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.482509" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.482268" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.483752" level="INFO">mapping: {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.483235" elapsed="0.000563"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.484379" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.483951" elapsed="0.000454"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.485444" 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-25T23:38:25.484775" elapsed="0.000709"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:38:25.487111" 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-25T23:38:25.486723" elapsed="0.000424"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:38:25.487224" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:38:25.487556" 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-25T23:38:25.485921" elapsed="0.001701"/>
</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-25T23:38:25.487840" elapsed="0.000529"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:38:25.484617" elapsed="0.003849"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.489407" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:38:25.488736" elapsed="0.000712"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:38:25.491083" level="INFO">${encoded} = 300</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-25T23:38:25.490693" elapsed="0.000426"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:38:25.491194" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:38:25.491528" level="INFO">${encoded_value} = 300</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-25T23:38:25.489886" elapsed="0.001694"/>
</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-25T23:38:25.491810" elapsed="0.000573"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:38:25.488581" elapsed="0.003900"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.493432" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:38:25.492755" elapsed="0.000719"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:38:25.495270" level="INFO">${encoded} = 5000</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-25T23:38:25.494878" elapsed="0.000429"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:38:25.495434" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:38:25.495802" level="INFO">${encoded_value} = 5000</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-25T23:38:25.493922" elapsed="0.001920"/>
</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-25T23:38:25.496080" elapsed="0.000509"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:38:25.492598" elapsed="0.004091"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.484451" elapsed="0.012276"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.496771" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:38:25.496930" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:38:25.482901" elapsed="0.014068"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.482620" elapsed="0.014383"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.497178" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.497030" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.482601" elapsed="0.014654"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.498193" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.497392" elapsed="0.000829"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.498270" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.479045" elapsed="0.019349"/>
</kw>
<msg time="2026-04-25T23:38:25.498448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.465948" elapsed="0.032551"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.510483" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.522399" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.534217" 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-25T23:38:25.534410" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.534578" 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-25T23:38:25.534937" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.534799" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.534784" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.535166" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.535367" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.535529" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.534754" elapsed="0.000828"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.534653" elapsed="0.000977"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.535773" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.535849" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.535979" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:38:25.461855" elapsed="0.074151"/>
</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-25T23:38:25.559797" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:38:25.559402" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.560628" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:38:25.560321" elapsed="0.000379">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.560793" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.559995" elapsed="0.000822"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.561376" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:38:25.560997" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.561694" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.561838" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:38:25.561557" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.562276" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.562034" elapsed="0.000290"/>
</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-25T23:38:25.562672" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.562389" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.563204" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</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-25T23:38:25.562894" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.562755" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.562370" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.564047" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:38:25.563425" elapsed="0.000652"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.564125" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.558790" elapsed="0.005458"/>
</kw>
<msg time="2026-04-25T23:38:25.564336" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.546729" elapsed="0.017656"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.576463" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.588304" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.600110" 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-25T23:38:25.600298" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.600466" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.600816" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.600678" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.600663" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.601041" 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-25T23:38:25.601203" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.601362" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.600636" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.600537" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.601574" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.601647" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.601762" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:38:25.545885" elapsed="0.055906"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.603037" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.602773" elapsed="0.000328">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.603228" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.602444" elapsed="0.000809"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.603565" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.603324" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.604146" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.603839" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.603667" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.603305" elapsed="0.000923"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.606482" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.604374" elapsed="0.002134"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:38:25.606559" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:38:25.606710" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:38:25.602128" elapsed="0.004607"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.608264" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.608017" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.608689" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.608455" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.609137" 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-25T23:38:25.608878" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.609561" 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-25T23:38:25.609323" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:25.610397" 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-25T23:38:25.610208" elapsed="0.000215"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:38:25.610743" 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-25T23:38:25.610570" elapsed="0.000198"/>
</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-25T23:38:25.610912" elapsed="0.000214"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.611519" 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-25T23:38:25.611276" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:38:25.611603" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:38:25.611773" 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-25T23:38:25.609798" elapsed="0.002000"/>
</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-25T23:38:25.634204" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:38:25.634256" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:38:25.634359" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:38:25.614059" elapsed="0.020326"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.611867" elapsed="0.022563"/>
</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-25T23:38:25.634604" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.634455" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.611850" elapsed="0.022841"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.637944" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.635711" elapsed="0.002292"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.635478" elapsed="0.002594"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.635460" elapsed="0.002640"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.640657" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.638372" elapsed="0.002331"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.638157" elapsed="0.002581"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.638140" elapsed="0.002623"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.641310" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.640920" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.641633" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.641406" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.642183" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.641868" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.641714" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.641388" elapsed="0.000877"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.642775" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.642418" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.643117" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.642870" elapsed="0.000305"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.643671" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.643351" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.643198" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.642852" elapsed="0.000902"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.643899" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:38:25.644691" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.644415" elapsed="0.000301"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.644864" elapsed="0.002289"/>
</kw>
<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="PASS" start="2026-04-25T23:38:25.635050" elapsed="0.012167"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:38:25.647394" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.647289" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.647270" elapsed="0.000207"/>
</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-25T23:38:25.647620" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.647704" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.649858" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:38:25.607060" elapsed="0.042825"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.649953" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T23:38:25.650119" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:38:25.451295" elapsed="0.198848"/>
</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-25T23:38:25.650474" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.650245" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.650228" elapsed="0.000373"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.650639" elapsed="0.000027"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:38:25.447096" elapsed="0.203668"/>
</kw>
<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="PASS" start="2026-04-25T23:38:25.444701" elapsed="0.206123"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:25.444519" elapsed="0.206344"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-25T23:38:25.444343" elapsed="0.206550"/>
</for>
<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-25T23:38:25.651397" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:38:25.651599" level="INFO">${getter} = ['Get_Notifications_Active_Status', ['1', 1], {}]</msg>
<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="PASS" start="2026-04-25T23:38:25.651107" elapsed="0.000517"/>
</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-25T23:38:25.652085" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:38:25.652290" level="INFO">${validator} = ['Check_Notifications_Active_Status', ['data_holder'], {}]</msg>
<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="PASS" start="2026-04-25T23:38:25.651842" elapsed="0.000473"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.652840" level="INFO">${validation_timeout_in_seconds} = 1020.0</msg>
<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="PASS" start="2026-04-25T23:38:25.652467" elapsed="0.000399"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.654454" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.654237" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.654220" elapsed="0.000313"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:38:25.654953" level="INFO">${period_in_seconds} = 600.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:38:25.654667" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.655277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.655065" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.655048" elapsed="0.000305"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:38:25.655862" level="INFO">${date_now} = 2026-04-25 23:38:25.656</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:38:25.655489" elapsed="0.000400"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:38:25.656321" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:38:25.656052" elapsed="0.000295"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-25T23:38:25.659231" level="INFO">${date_deadline} = 2026-04-25 23:55:25.656</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-25T23:38:25.656499" elapsed="0.002761"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-25T23:38:25.659310" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.659552" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<msg time="2026-04-25T23:38:25.659598" level="INFO">${period_in_seconds} = 600.0</msg>
<msg time="2026-04-25T23:38:25.659639" level="INFO">${date_deadline} = 2026-04-25 23:55:25.656</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-25T23:38:25.653871" elapsed="0.005807"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.660234" level="INFO">${iterations} = 1.7</msg>
<var>${iterations}</var>
<arg>${timeout_in_seconds} / ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.659842" elapsed="0.000418"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.662293" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:38:25.662339" level="INFO">${args} = ['1', 1]</msg>
<msg time="2026-04-25T23:38:25.662381" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.661996" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.663682" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:38:25.663420" elapsed="0.000289"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.666055" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.665296" elapsed="0.000842"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:38:25.666308" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:38:25.666581" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:38:25.664814" elapsed="0.001792"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.667284" 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-25T23:38:25.666766" elapsed="0.000545"/>
</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-25T23:38:25.703258" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.702873" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.704035" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.703790" elapsed="0.000312">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.704195" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.703443" elapsed="0.000776"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.704758" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.704376" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.705088" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.705223" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:38:25.704937" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.705635" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.705396" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.706613" 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-25T23:38:25.706362" elapsed="0.000294"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.707084" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.706808" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.707762" 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-25T23:38:25.707444" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:38:25.708502" 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-25T23:38:25.708290" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:38:25.708576" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.708725" 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-25T23:38:25.707980" elapsed="0.000769"/>
</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-25T23:38:25.708893" elapsed="0.000239"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:38:25.707317" elapsed="0.001856"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.707156" elapsed="0.002051"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:38:25.709249" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:38:25.709400" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:38:25.706049" elapsed="0.003381"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.705746" elapsed="0.003716"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.709629" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.709486" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.705727" elapsed="0.003977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.710287" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.709841" elapsed="0.000473"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.710396" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.702275" elapsed="0.008245"/>
</kw>
<msg time="2026-04-25T23:38:25.710571" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.690249" elapsed="0.020372"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.722615" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.734350" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.746004" 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-25T23:38:25.746191" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.746358" 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-25T23:38:25.746709" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.746571" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.746556" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.746918" 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-25T23:38:25.747099" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.747257" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.746529" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.746430" elapsed="0.000903"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.747469" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.747543" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.747674" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:38:25.685915" elapsed="0.061823"/>
</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-25T23:38:25.771529" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:38:25.771162" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.772300" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:38:25.772081" elapsed="0.000283">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.772462" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.771739" elapsed="0.000747"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.773035" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:38:25.772641" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.773347" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:38:25.773473" 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-25T23:38:25.773215" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.773891" 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-25T23:38:25.773653" elapsed="0.000283"/>
</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-25T23:38:25.774298" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.774018" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.774805" 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-25T23:38:25.774519" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.774381" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.773998" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.775555" 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-25T23:38:25.775039" elapsed="0.000544"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.775631" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:38:25.770549" elapsed="0.005220"/>
</kw>
<msg time="2026-04-25T23:38:25.775822" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.758538" elapsed="0.017334"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.787827" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.799523" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.811246" 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-25T23:38:25.811433" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.811600" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.811998" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.811846" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:38:25.811827" elapsed="0.000251"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.812211" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.812371" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.812528" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:38:25.811798" elapsed="0.000782"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.811672" elapsed="0.000933"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.812741" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.812814" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.812956" 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-25T23:38:25.757527" elapsed="0.055497"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:38:25.814490" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.814249" elapsed="0.000304">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:38:25.814643" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:38:25.813897" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.814987" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.814735" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.815510" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.815225" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.815068" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.814716" elapsed="0.000875"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.817856" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.815734" elapsed="0.002148"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:38:25.817932" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:38:25.818127" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:38:25.813452" elapsed="0.004714"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.819922" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.819636" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.820405" 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-25T23:38:25.820168" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.820835" 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-25T23:38:25.820595" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.821273" 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-25T23:38:25.821036" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:38:25.822118" 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-25T23:38:25.821896" elapsed="0.000248"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:38:25.822464" 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-25T23:38:25.822293" elapsed="0.000196"/>
</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-25T23:38:25.822630" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.823234" 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-25T23:38:25.822988" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:38:25.823319" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:38:25.823471" 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-25T23:38:25.821505" elapsed="0.001990"/>
</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-25T23:38:25.841779" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:38:25.842118" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '140'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1050&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:38:25.842254" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:38:25.825738" elapsed="0.016552"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.823563" elapsed="0.018788"/>
</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-25T23:38:25.842592" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.842387" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.823546" elapsed="0.019166"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.847353" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1050&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.844137" elapsed="0.003285"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.843815" elapsed="0.003654"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.843789" elapsed="0.003715"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.851094" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:38:25.847891" elapsed="0.003267"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.847578" elapsed="0.003626"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.847556" elapsed="0.003682"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.852018" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.851452" elapsed="0.000604"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.852470" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.852152" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.853151" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.852794" elapsed="0.000383"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.852583" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.852127" elapsed="0.001107"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.853736" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.853383" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.854108" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.853866" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.854631" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.854341" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:38:25.854189" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.853847" elapsed="0.000865"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:38:25.854853" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:38:25.855639" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.855369" elapsed="0.000296"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.855822" elapsed="0.002302"/>
</kw>
<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="PASS" start="2026-04-25T23:38:25.843201" elapsed="0.014984"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:38:25.858361" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.858257" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.858238" elapsed="0.000206"/>
</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-25T23:38:25.858585" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.858651" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:38:25.860916" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1050&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:38:25.818582" elapsed="0.042397"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.861120" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:38:25.861415" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1050&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:38:25.673061" elapsed="0.188435"/>
</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-25T23:38:25.862237" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.861685" elapsed="0.000649"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.861666" elapsed="0.000716"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:38:25.862430" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:38:25.862693" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1050&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:38:25.667591" elapsed="0.195130"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:38:25.864830" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aafbce0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:38:25.862884" elapsed="0.001974"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:38:25.865437" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:38:25.865029" elapsed="0.000434"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.866032" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.865615" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:38:25.866736" elapsed="0.000624"/>
</kw>
<msg time="2026-04-25T23:38:25.867531" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.867576" level="INFO">${publish_count} = 1050</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.866215" elapsed="0.001383"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.867997" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.867675" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.867655" elapsed="0.000518"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.868884" level="INFO">${publish_count} = 1050</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.868318" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:38:25.870354" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.869610" elapsed="0.000927">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:38:25.870677" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:38:25.870721" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.869088" elapsed="0.001656"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.871112" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.870819" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.870801" elapsed="0.000484"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.876849" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:38:25.871427" elapsed="0.005448"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:38:25.876926" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T23:38:25.877170" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:38:25.877213" level="INFO">${publ_count} = 1050</msg>
<msg time="2026-04-25T23:38:25.877253" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:38:25.664321" elapsed="0.212954"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.877430" elapsed="0.000231"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:38:25.877813" elapsed="0.005921"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:38:25.663938" elapsed="0.219863"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-25T23:38:25.663756" elapsed="0.220077"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-25T23:38:25.883876" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:38:25.663056" elapsed="0.220959"/>
</kw>
<msg time="2026-04-25T23:38:25.884095" level="INFO">${result} = [True]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:38:25.662567" elapsed="0.221552"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:38:25.884166" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-25T23:38:25.661625" elapsed="0.222655"/>
</kw>
<msg time="2026-04-25T23:38:25.884369" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:38:25.884413" level="INFO">${message} = [True]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.661122" elapsed="0.223313"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.884589" elapsed="0.026402"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:38:25.911953" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:38:25.911820" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.911777" elapsed="0.000287"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.912218" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [True].</doc>
<status status="PASS" start="2026-04-25T23:38:25.911403" elapsed="0.000898"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:38:25.912345" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:38:25.912498" level="INFO">${data} = [True]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:38:25.660718" elapsed="0.251806"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.914841" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:38:25.914978" level="INFO">${args} = ['data_holder']</msg>
<msg time="2026-04-25T23:38:25.915026" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:38:25.914539" elapsed="0.000509"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-25T23:38:25.915201" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.917192" level="FAIL">False != True</msg>
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.916604" elapsed="0.000659">False != True</status>
</kw>
<var name="${active}">True</var>
<status status="FAIL" start="2026-04-25T23:38:25.916475" elapsed="0.000863">False != True</status>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="FAIL" start="2026-04-25T23:38:25.916341" elapsed="0.001059">False != True</status>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="FAIL" start="2026-04-25T23:38:25.916078" elapsed="0.001429">False != True</status>
</kw>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.915567" elapsed="0.001990">False != True</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.917616" elapsed="0.000017"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.914165" elapsed="0.003550">False != True</status>
</kw>
<msg time="2026-04-25T23:38:25.917819" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:38:25.917863" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.913628" elapsed="0.004258"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.918061" elapsed="0.022052"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="NOT RUN" start="2026-04-25T23:38:25.941104" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.940942" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.940919" elapsed="0.000254"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.941670" level="FAIL">False != True</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.941323" elapsed="0.000417">False != True</status>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If FAIL is PASS do nothing. Otherwise Fail with False != True.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.940542" elapsed="0.001313">False != True</status>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.941911" elapsed="0.000017"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="FAIL" start="2026-04-25T23:38:25.913199" elapsed="0.028839">False != True</status>
</kw>
<msg time="2026-04-25T23:38:25.942151" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:38:25.942195" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:38:25.912685" elapsed="0.029533"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:38:25.942405" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:38:25.942297" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.942279" elapsed="0.000190"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:38:25.943400" level="INFO">${date_now} = 2026-04-25 23:38:25.943</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:38:25.943228" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-25T23:38:25.943999" level="INFO">${time_deadline} = 1019.713</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-25T23:38:25.943571" elapsed="0.000456"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:38:25.944583" level="INFO">${time_minimal} = 600.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:38:25.944187" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:38:25.944918" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:38:25.944680" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-25T23:38:25.944662" elapsed="0.000361"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-25T23:38:25.942684" elapsed="0.002387"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.945815" level="INFO">Slept 10 minutes.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-25T23:38:25.945217" elapsed="600.000973"/>
</kw>
<var name="${i}">0.0</var>
<status status="PASS" start="2026-04-25T23:38:25.660519" elapsed="600.285792"/>
</iter>
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.951300" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:48:25.951407" level="INFO">${args} = ['1', 1]</msg>
<msg time="2026-04-25T23:48:25.951503" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:25.950587" elapsed="0.000966"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.954518" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:25.954150" elapsed="0.000395"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.957168" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:25.956400" elapsed="0.000851"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:25.957392" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:48:25.957675" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:25.955899" elapsed="0.001803"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.958419" 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-25T23:48:25.957877" elapsed="0.000571"/>
</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-25T23:48:25.994825" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:25.994447" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:25.995637" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:25.995360" elapsed="0.000357">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:25.995811" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:25.995030" elapsed="0.000806"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.996426" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:25.996039" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:25.996751" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:25.996909" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:25.996611" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.997372" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.997118" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.998376" 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-25T23:48:25.998118" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.998833" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:25.998574" elapsed="0.000284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.999510" 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-25T23:48:25.999215" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:26.000262" 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-25T23:48:26.000042" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:26.000336" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:26.000502" 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-25T23:48:25.999715" elapsed="0.000812"/>
</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-25T23:48:26.000676" elapsed="0.000240"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:48:25.999086" elapsed="0.001884"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:25.998905" elapsed="0.002101"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.001071" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.001226" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:25.997784" elapsed="0.003466"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:25.997490" elapsed="0.003842"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.001507" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.001360" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.997469" elapsed="0.004117"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.002192" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.001725" elapsed="0.000495"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.002268" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:25.993754" elapsed="0.008637"/>
</kw>
<msg time="2026-04-25T23:48:26.002444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:25.981334" elapsed="0.021161"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.014591" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.026378" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.038117" 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-25T23:48:26.038307" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.038476" 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-25T23:48:26.038833" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.038692" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.038677" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.039060" 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-25T23:48:26.039225" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.039385" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.038650" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.038550" elapsed="0.000913"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.039600" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.039674" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:26.039810" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:48:25.977089" elapsed="0.062793"/>
</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-25T23:48:26.063749" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:26.063380" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.064507" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:26.064286" elapsed="0.000284">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.064662" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.063932" elapsed="0.000754"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.065242" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:48:26.064844" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.065557" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.065679" 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-25T23:48:26.065425" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.066116" 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-25T23:48:26.065856" elapsed="0.000307"/>
</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-25T23:48:26.066515" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.066230" elapsed="0.000344"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.067046" 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-25T23:48:26.066740" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.066599" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.066211" elapsed="0.000917"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.067796" 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-25T23:48:26.067267" elapsed="0.000558"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.067883" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.062767" elapsed="0.005268"/>
</kw>
<msg time="2026-04-25T23:48:26.068087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.050781" elapsed="0.017357"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.080123" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.092015" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.103808" 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-25T23:48:26.104017" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.104191" 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-25T23:48:26.104554" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.104413" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.104397" 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-25T23:48:26.104767" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.104928" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.105123" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.104369" elapsed="0.000808"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.104266" elapsed="0.000936"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.105342" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.105417" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:26.105566" 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-25T23:48:26.049804" elapsed="0.055805"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.107145" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.106875" elapsed="0.000359">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.107327" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.106529" elapsed="0.000823"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.107666" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.107423" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.108228" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.107918" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.107745" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.107404" elapsed="0.000906"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.110605" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.108461" elapsed="0.002170"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:26.110727" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:26.110908" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:26.106075" elapsed="0.004873"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.112740" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.112487" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.113241" 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-25T23:48:26.112935" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.113677" 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-25T23:48:26.113438" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.114134" 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-25T23:48:26.113865" elapsed="0.000311"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:26.114981" 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-25T23:48:26.114765" elapsed="0.000244"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:26.115352" 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-25T23:48:26.115172" elapsed="0.000206"/>
</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-25T23:48:26.115523" elapsed="0.000202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.116307" 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-25T23:48:26.116055" elapsed="0.000296"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:26.116393" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.116548" 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-25T23:48:26.114373" elapsed="0.002199"/>
</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-25T23:48:26.128327" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:48:26.128669" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:26.128829" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:26.118821" elapsed="0.010044"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.116641" elapsed="0.012286"/>
</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-25T23:48:26.129198" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.128986" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.116623" elapsed="0.012697"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.133953" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.130732" elapsed="0.003311"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.130431" elapsed="0.003660"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.130405" elapsed="0.003723"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.137731" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.134506" elapsed="0.003290"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.134206" elapsed="0.003637"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.134182" elapsed="0.003697"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.138662" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.138119" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.139152" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.138800" elapsed="0.000480"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.140030" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.139588" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.139318" elapsed="0.000800"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.138774" elapsed="0.001375"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.140878" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.140364" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.141352" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.141034" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.142114" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.141682" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.141465" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.141007" elapsed="0.001223"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.142451" elapsed="0.000541"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:26.143626" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.143230" elapsed="0.000433"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.143870" elapsed="0.003283"/>
</kw>
<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="PASS" start="2026-04-25T23:48:26.129802" elapsed="0.017441"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:26.147480" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.147345" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.147319" elapsed="0.000247"/>
</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-25T23:48:26.147708" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.147776" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:26.150038" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:26.111410" elapsed="0.038673"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.150222" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:26.150535" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:25.964089" elapsed="0.186528"/>
</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-25T23:48:26.151386" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.150808" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.150789" elapsed="0.000745"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.151583" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.151856" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:25.958730" elapsed="0.193154"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:26.152553" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0cadf560&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:26.152101" elapsed="0.000480"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.153199" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.152772" elapsed="0.000454"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.153781" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.153379" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.154526" elapsed="0.000644"/>
</kw>
<msg time="2026-04-25T23:48:26.155308" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.155354" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.153979" elapsed="0.001399"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.155743" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.155457" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.155437" elapsed="0.000481"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.156653" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.156080" elapsed="0.000600"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.158041" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.157389" elapsed="0.000843">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:48:26.158404" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:26.158450" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.156843" elapsed="0.001630"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.158833" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.158551" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.158532" elapsed="0.000565"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.164763" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.159242" elapsed="0.005549"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:48:26.164843" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.165090" level="INFO">${active} = False</msg>
<msg time="2026-04-25T23:48:26.165135" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-25T23:48:26.165175" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:48:25.955395" elapsed="0.209803"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.165356" elapsed="0.000235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:26.165743" elapsed="0.006027"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:25.954814" elapsed="0.216996"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-25T23:48:25.954598" elapsed="0.217243"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-25T23:48:26.171885" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:48:25.953237" elapsed="0.218791"/>
</kw>
<msg time="2026-04-25T23:48:26.172109" level="INFO">${result} = [False]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:48:25.952080" elapsed="0.220054"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:48:26.172182" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-25T23:48:25.949717" elapsed="0.222583"/>
</kw>
<msg time="2026-04-25T23:48:26.172391" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.172435" level="INFO">${message} = [False]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.948491" elapsed="0.223967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.172613" elapsed="0.024152"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:48:26.197762" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.197599" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.197577" elapsed="0.000277"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.198037" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [False].</doc>
<status status="PASS" start="2026-04-25T23:48:26.197199" elapsed="0.001003"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:26.198247" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:26.198400" level="INFO">${data} = [False]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:48:25.947456" elapsed="0.250969"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.200706" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:48:26.200754" level="INFO">${args} = [[True]]</msg>
<msg time="2026-04-25T23:48:26.200798" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.200399" elapsed="0.000422"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.200992" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:26.202377" elapsed="0.000523"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-25T23:48:26.202249" elapsed="0.000690"/>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="PASS" start="2026-04-25T23:48:26.202115" elapsed="0.000890"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:48:26.201829" elapsed="0.001231"/>
</kw>
<msg time="2026-04-25T23:48:26.203141" level="INFO">${result} = None</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:48:26.201359" elapsed="0.001806"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:48:26.203213" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="PASS" start="2026-04-25T23:48:26.200025" elapsed="0.003307"/>
</kw>
<msg time="2026-04-25T23:48:26.203427" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.203472" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.199496" elapsed="0.003998"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.203650" elapsed="0.022023"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:48:26.226649" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.226519" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.226497" elapsed="0.000244"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.226895" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with None.</doc>
<status status="PASS" start="2026-04-25T23:48:26.226119" elapsed="0.000880"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:26.227044" elapsed="0.000026"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:48:26.199065" elapsed="0.028101"/>
</kw>
<msg time="2026-04-25T23:48:26.227266" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.227313" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.198588" elapsed="0.028748"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:26.227519" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.227413" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.227395" elapsed="0.000205"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.227816" elapsed="0.000025"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.228007" elapsed="0.000022"/>
</kw>
<var name="${i}">1.0</var>
<status status="PASS" start="2026-04-25T23:48:25.946835" elapsed="0.281228"/>
</iter>
<var>${i}</var>
<value>${iterations}</value>
<status status="PASS" start="2026-04-25T23:38:25.660310" elapsed="600.567787"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.228239" elapsed="0.000020"/>
</kw>
<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="PASS" start="2026-04-25T23:38:25.653172" elapsed="600.575187"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.230413" level="INFO">${sum_local_number} = 0</msg>
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.228520" elapsed="0.001921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.230946" level="INFO">${low_limit_pair_rate} = 4500.0</msg>
<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="PASS" start="2026-04-25T23:48:26.230595" elapsed="0.000393"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.231564" level="INFO">${high_limit_pair_rate} = 5500.0</msg>
<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="PASS" start="2026-04-25T23:48:26.231217" elapsed="0.000373"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.236397" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.236100" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:26.236470" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.236619" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:26.235744" elapsed="0.000900"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.237223" 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-25T23:48:26.236803" elapsed="0.000448"/>
</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-25T23:48:26.270024" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.269637" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.270892" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.270532" elapsed="0.000456">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.271084" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.270208" elapsed="0.000900"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.271648" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:48:26.271267" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.271986" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.272145" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:26.271831" elapsed="0.000339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.272588" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.272343" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.273792" 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-25T23:48:26.273323" elapsed="0.000516"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.274423" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.274009" elapsed="0.000440"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.275499" 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-25T23:48:26.274822" elapsed="0.000718"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:26.277232" 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-25T23:48:26.276829" elapsed="0.000439"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:26.277347" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:48:26.277685" 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-25T23:48:26.276016" elapsed="0.001710"/>
</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-25T23:48:26.277973" elapsed="0.000551"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:48:26.274662" elapsed="0.003975"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.274497" elapsed="0.004179"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.278719" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.278897" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:26.273008" elapsed="0.005915"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.272701" elapsed="0.006268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.279190" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.278996" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.272682" elapsed="0.006597"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.280090" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:48:26.279418" elapsed="0.000700"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.280168" elapsed="0.000042"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.269039" elapsed="0.011268"/>
</kw>
<msg time="2026-04-25T23:48:26.280362" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.256928" elapsed="0.023482"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.293693" elapsed="0.000064"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.305662" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.317504" 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-25T23:48:26.317718" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.317896" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.318286" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.318143" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.318127" 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-25T23:48:26.318504" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.318664" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.318823" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.318096" elapsed="0.000779"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.317988" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.319057" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.319135" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:48:26.319265" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:48:26.252790" elapsed="0.066502"/>
</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-25T23:48:26.343708" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:48:26.343323" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.344608" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:48:26.344242" elapsed="0.000446">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.344782" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.343893" elapsed="0.000913"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.345402" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:48:26.345010" elapsed="0.000419"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.345722" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.345877" 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-25T23:48:26.345586" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.346327" 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-25T23:48:26.346078" elapsed="0.000295"/>
</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-25T23:48:26.346722" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.346439" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.347267" 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-25T23:48:26.346944" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.346805" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.346421" elapsed="0.000928"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.348044" 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-25T23:48:26.347488" elapsed="0.000585"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.348122" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.342653" elapsed="0.005593"/>
</kw>
<msg time="2026-04-25T23:48:26.348298" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.330267" elapsed="0.018079"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.360387" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.372312" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.384134" 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-25T23:48:26.384324" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.384494" 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-25T23:48:26.384844" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.384706" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.384691" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.385070" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.385232" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.385391" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.384664" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.384568" elapsed="0.000901"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.385607" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.385681" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.385795" 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-25T23:48:26.329398" elapsed="0.056424"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.387105" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:48:26.386826" elapsed="0.000343">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.387259" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.386498" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.387590" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.387352" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.388146" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.387841" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.387668" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.387333" elapsed="0.000894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.390472" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.388372" elapsed="0.002126"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:26.390548" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.390698" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:26.386159" elapsed="0.004563"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.392232" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.391985" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.392701" 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-25T23:48:26.392461" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.393154" 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-25T23:48:26.392894" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.393583" 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-25T23:48:26.393345" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:26.394435" 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-25T23:48:26.394240" elapsed="0.000221"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:26.394780" 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-25T23:48:26.394609" elapsed="0.000196"/>
</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-25T23:48:26.394948" elapsed="0.000225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.395569" 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-25T23:48:26.395323" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:26.395655" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.395808" 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-25T23:48:26.393819" elapsed="0.002014"/>
</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-25T23:48:26.420024" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:48:26.420309" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '190'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;1500001&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:26.420424" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:26.398090" elapsed="0.022361"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.395904" elapsed="0.024593"/>
</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-25T23:48:26.420680" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.420529" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.395885" elapsed="0.024884"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.424130" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;1500001&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.421805" elapsed="0.002376"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.421569" elapsed="0.002647"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.421551" elapsed="0.002690"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.426835" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.424510" elapsed="0.002371"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.424297" elapsed="0.002619"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.424280" elapsed="0.002661"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.427493" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.427113" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.427819" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.427590" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.428367" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.428069" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.427900" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.427571" elapsed="0.000879"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.428973" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.428602" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.429354" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.429123" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.429914" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.429588" elapsed="0.000352"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.429435" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.429104" elapsed="0.000918"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.430166" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:26.430946" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.430669" elapsed="0.000320"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.431140" elapsed="0.002433"/>
</kw>
<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="PASS" start="2026-04-25T23:48:26.421135" elapsed="0.012502"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:26.433816" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.433709" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.433690" elapsed="0.000211"/>
</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-25T23:48:26.434067" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.434137" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.436480" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;1500001&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:26.391056" elapsed="0.045455"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.436582" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.436747" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;1500001&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:26.242030" elapsed="0.194746"/>
</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-25T23:48:26.437137" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.436880" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.436862" elapsed="0.000368"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.437263" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:26.437415" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;1500001&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-25T23:48:26.237500" elapsed="0.199944"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:26.438014" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ca090d0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:26.437626" elapsed="0.000416"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.438492" level="INFO">${all_not} = 1500001</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.438202" elapsed="0.000317"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.438951" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.438671" elapsed="0.000321"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.439469" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.439181" elapsed="0.000315"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:26.439950" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:26.439660" elapsed="0.000332"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-25T23:48:26.440049" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.440319" level="INFO">${all_not} = 1500001</msg>
<msg time="2026-04-25T23:48:26.440363" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-25T23:48:26.440404" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-25T23:48:26.440444" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:48:26.235287" elapsed="0.205181"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.442767" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:48:26.440630" elapsed="0.002202"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.444827" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:48:26.443002" elapsed="0.001884"/>
</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="PASS" start="2026-04-25T23:48:26.445050" elapsed="0.000338"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.445903" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:48:26.445544" elapsed="0.000386"/>
</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="PASS" start="2026-04-25T23:48:26.446102" elapsed="0.000327"/>
</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="PASS" start="2026-04-25T23:48:26.446577" elapsed="0.000321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.447418" level="INFO">${sum_local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:48:26.447065" elapsed="0.000379"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:26.231863" elapsed="0.215616"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-25T23:48:26.231646" elapsed="0.215863"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.448031" level="INFO">${final_rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:48:26.447659" elapsed="0.000399"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.448532" level="INFO">${low_limit_final_rate} = 4500.0</msg>
<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="PASS" start="2026-04-25T23:48:26.448207" elapsed="0.000351"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.449045" level="INFO">${high_limit_final_rate} = 5500.0</msg>
<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="PASS" start="2026-04-25T23:48:26.448705" elapsed="0.000366"/>
</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="PASS" start="2026-04-25T23:48:26.449216" elapsed="0.000336"/>
</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="PASS" start="2026-04-25T23:48:26.449699" elapsed="0.000343"/>
</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="PASS" start="2026-04-25T23:38:25.215304" elapsed="601.234800"/>
</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-25T23:48:26.451327" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.450936" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.450917" elapsed="0.000496"/>
</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-25T23:48:26.451553" elapsed="0.000308"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.456657" 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-25T23:48:26.456261" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:48:26.456898" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.456758" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.456740" elapsed="0.000255"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.457184" elapsed="0.000023"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:48:26.457352" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.457520" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:48:26.457682" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:48:26.457844" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.458024" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.458186" elapsed="0.000019"/>
</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-25T23:48:26.455953" elapsed="0.002309"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.450725" elapsed="0.007589"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:48:26.450372" elapsed="0.007985"/>
</kw>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:38:25.080058" elapsed="601.378341"/>
</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-25T23:48:26.462319" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:48:26.462061" elapsed="0.000520"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.463542" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:26.463432" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.463413" elapsed="0.000197"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.468393" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:26.468287" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.468269" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.469451" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.469074" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.469924" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:26.469631" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:26.470011" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.470166" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.468676" elapsed="0.001515"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.475403" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:26.475296" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.475277" elapsed="0.000193"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.476783" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:26.476498" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.476480" elapsed="0.000370"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:26.477339" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.477041" elapsed="0.000325"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:26.477733" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:26.477519" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:26.509566" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:26.478256" elapsed="0.031551"/>
</kw>
<msg time="2026-04-25T23:48:26.510330" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:26.510439" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.477913" elapsed="0.032610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:26.545128" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "2 "0 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:26.511728" elapsed="0.033507"/>
</kw>
<msg time="2026-04-25T23:48:26.545398" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:26.545443" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.510911" elapsed="0.034570"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.545794" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.545564" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.545542" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.546346" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "2 "0 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.546042" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.546694" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.546484" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.546466" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:26.546804" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.548267" elapsed="0.000798"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.549343" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:26.550092" elapsed="0.000365"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:26.547618" elapsed="0.002940"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:26.547090" elapsed="0.003532"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:26.476199" elapsed="0.074521"/>
</kw>
<msg time="2026-04-25T23:48:26.550810" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.550854" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.475617" elapsed="0.075275"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:26.551098" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.550988" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.550948" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.551574" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.551921" elapsed="0.000050"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.552021" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:26.474949" elapsed="0.077178"/>
</kw>
<msg time="2026-04-25T23:48:26.552219" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:26.552262" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.470546" elapsed="0.081754"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.552616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.552373" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.552356" elapsed="0.000373"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:26.470410" elapsed="0.082343"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:26.470242" elapsed="0.082540"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:48:26.467919" elapsed="0.084919"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:48:26.463149" elapsed="0.089743"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:26.462725" elapsed="0.090211"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:48:26.459450" elapsed="0.093557"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.559746" 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-25T23:48:26.559439" elapsed="0.000354"/>
</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-25T23:48:26.560834" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.561061" 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-25T23:48:26.560610" elapsed="0.000477"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.561623" 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-25T23:48:26.561245" elapsed="0.000420"/>
</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-25T23:48:26.562190" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.562397" 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-25T23:48:26.561836" elapsed="0.000587"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.562974" 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-25T23:48:26.562582" elapsed="0.000436"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.560329" elapsed="0.002745"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-25T23:48:26.560011" elapsed="0.003109"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.565520" 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-25T23:48:26.563261" elapsed="0.002286"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.566324" 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-25T23:48:26.565998" elapsed="0.000353"/>
</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-25T23:48:26.570755" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.570462" elapsed="0.000320"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:26.570827" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.570987" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:26.570125" elapsed="0.000888"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.571578" 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-25T23:48:26.571170" elapsed="0.000435"/>
</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-25T23:48:26.604053" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.603666" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.604883" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.604561" elapsed="0.000419">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.605076" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.604237" elapsed="0.000864"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.605689" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.605302" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.606027" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.606180" 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-25T23:48:26.605873" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.606604" 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-25T23:48:26.606355" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.607979" 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-25T23:48:26.607495" elapsed="0.000532"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.608597" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.608183" elapsed="0.000441"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.609676" 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-25T23:48:26.609012" elapsed="0.000706"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:26.611416" 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-25T23:48:26.611026" elapsed="0.000425"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:26.611527" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:26.611864" 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-25T23:48:26.610190" elapsed="0.001714"/>
</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-25T23:48:26.612143" elapsed="0.000521"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:48:26.608836" elapsed="0.003927"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.608672" elapsed="0.004128"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.612843" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.613016" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:26.607038" elapsed="0.006004"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.606715" elapsed="0.006359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.613242" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.613099" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.606696" elapsed="0.006623"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.613892" 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-25T23:48:26.613455" elapsed="0.000464"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.613982" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.603061" elapsed="0.011045"/>
</kw>
<msg time="2026-04-25T23:48:26.614159" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.591018" elapsed="0.023190"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.626202" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.637986" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.649924" 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-25T23:48:26.650138" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.650318" 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-25T23:48:26.650675" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.650536" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.650521" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.650888" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.651071" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.651233" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.650493" elapsed="0.000793"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.650393" elapsed="0.000918"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.651450" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.651525" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.651636" 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-25T23:48:26.586878" elapsed="0.064783"/>
</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-25T23:48:26.675536" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:26.675162" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.676349" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:26.676062" elapsed="0.000350">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.676506" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.675722" elapsed="0.000808"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.677140" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.676688" elapsed="0.000480"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.677458" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.677580" 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-25T23:48:26.677324" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.678038" 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-25T23:48:26.677757" elapsed="0.000328"/>
</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-25T23:48:26.678434" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.678152" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.679004" 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-25T23:48:26.678696" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.678553" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.678133" elapsed="0.000956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.679764" 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-25T23:48:26.679230" elapsed="0.000562"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.679841" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.674540" elapsed="0.005440"/>
</kw>
<msg time="2026-04-25T23:48:26.680035" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.662254" elapsed="0.017829"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.691954" elapsed="0.000038"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.703824" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.715746" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.715945" elapsed="0.000035"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.716130" 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-25T23:48:26.716488" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.716350" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.716335" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.716697" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.716856" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.717029" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.716307" elapsed="0.000775"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.716203" elapsed="0.000904"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.717264" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.717341" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.717465" 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-25T23:48:26.661400" elapsed="0.056130"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.718783" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.718544" elapsed="0.000304">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.718938" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.718204" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.719289" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.719050" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.719813" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.719527" elapsed="0.000312"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.719368" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.719031" elapsed="0.000863"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.722355" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.720058" elapsed="0.002324"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:26.722434" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:26.722588" 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-chromium/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-25T23:48:26.717864" elapsed="0.004748"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.724126" 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-25T23:48:26.723862" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.724553" 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-25T23:48:26.724318" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.725000" 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-25T23:48:26.724745" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.725439" 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-25T23:48:26.725200" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:26.726287" 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-25T23:48:26.726093" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:26.726633" 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-25T23:48:26.726461" elapsed="0.000197"/>
</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-25T23:48:26.726799" elapsed="0.000218"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.727415" 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-25T23:48:26.727172" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:26.727499" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.727651" 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-25T23:48:26.725676" elapsed="0.001999"/>
</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-25T23:48:26.734844" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:48:26.734928" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:26.735042" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:26.729752" elapsed="0.005316"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.727744" elapsed="0.007369"/>
</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-25T23:48:26.735285" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.735139" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.727727" elapsed="0.007644"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.739828" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.736377" elapsed="0.003494"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.736154" elapsed="0.003752"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.736136" elapsed="0.003795"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.743138" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.740217" elapsed="0.002989"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.740001" elapsed="0.003255"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.739984" elapsed="0.003309"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.744094" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.743523" elapsed="0.000612"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.744573" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.744236" elapsed="0.000421"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.745406" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.744932" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.744692" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.744210" elapsed="0.001318"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.746308" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.745752" elapsed="0.000594"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.746778" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.746447" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.747594" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.747155" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.746896" elapsed="0.000788"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.746421" elapsed="0.001294"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.747925" elapsed="0.000536"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:26.749148" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.748696" elapsed="0.000491"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.749404" elapsed="0.003454"/>
</kw>
<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="PASS" start="2026-04-25T23:48:26.735712" elapsed="0.017276"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:26.753255" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.753098" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.753070" elapsed="0.000310"/>
</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-25T23:48:26.753548" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.753614" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.755927" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:26.722930" elapsed="0.033038"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.756076" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:26.756233" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:26.576109" elapsed="0.180148"/>
</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-25T23:48:26.756593" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.756360" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.756343" elapsed="0.000356"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.756732" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:48:26.571848" elapsed="0.185004"/>
</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="PASS" start="2026-04-25T23:48:26.569658" elapsed="0.187253"/>
</kw>
<var name="${suffix}">5000</var>
<status status="PASS" start="2026-04-25T23:48:26.565851" elapsed="0.191117"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.757518" level="INFO">${count} = 2</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-25T23:48:26.757191" elapsed="0.000354"/>
</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-25T23:48:26.761951" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.761658" elapsed="0.000335"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:26.762039" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.762185" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:26.761321" elapsed="0.000889"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.762741" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:48:26.762365" elapsed="0.000403"/>
</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-25T23:48:26.795365" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.794992" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.796209" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.795873" elapsed="0.000401">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.796366" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.795549" elapsed="0.000841"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.796923" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.796548" elapsed="0.000402"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.797255" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.797388" 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-25T23:48:26.797122" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.797801" 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-25T23:48:26.797561" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.799007" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.798528" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.799613" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.799206" elapsed="0.000433"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.800750" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:26.800086" elapsed="0.000705"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:26.802453" level="INFO">${encoded} = working-pair-2</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-25T23:48:26.802072" elapsed="0.000417"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:26.802565" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:48:26.802902" level="INFO">${encoded_value} = working-pair-2</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-25T23:48:26.801260" elapsed="0.001681"/>
</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-25T23:48:26.803178" elapsed="0.000510"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:48:26.799890" elapsed="0.003897"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.799722" elapsed="0.004102"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.803867" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.804052" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:26.798216" elapsed="0.005861"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.797911" elapsed="0.006198"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.804276" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.804134" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.797892" elapsed="0.006461"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.804926" 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-25T23:48:26.804488" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.805024" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.794380" elapsed="0.010766"/>
</kw>
<msg time="2026-04-25T23:48:26.805198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.782279" elapsed="0.022967"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.817491" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.829400" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.841579" elapsed="0.000040"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.841793" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.841977" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.842347" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.842208" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.842192" elapsed="0.000275"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.842605" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.842768" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.842928" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.842158" elapsed="0.000840"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.842053" elapsed="0.000971"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.843164" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.843240" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.843362" 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-25T23:48:26.778144" elapsed="0.065244"/>
</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-25T23:48:26.867249" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:26.866849" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.868062" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:26.867755" elapsed="0.000379">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.868229" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.867434" elapsed="0.000820"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.868795" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.868415" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.869127" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.869256" 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-25T23:48:26.868991" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.869673" 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-25T23:48:26.869432" elapsed="0.000288"/>
</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-25T23:48:26.870084" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.869785" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.870596" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:48:26.870305" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.870167" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.869767" elapsed="0.000912"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.871389" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:26.870818" elapsed="0.000603"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.871470" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.866246" elapsed="0.005348"/>
</kw>
<msg time="2026-04-25T23:48:26.871683" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.854067" elapsed="0.017665"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.883814" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.895703" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.907603" 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-25T23:48:26.907791" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.907971" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.908325" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.908186" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:26.908171" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.908538" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.908699" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.908857" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:26.908144" elapsed="0.000765"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.908046" elapsed="0.000888"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.909087" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.909163" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:26.909278" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:26.853215" elapsed="0.056089"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.910538" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.910290" elapsed="0.000310">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.910692" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.909944" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.911084" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.910822" elapsed="0.000321"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.911614" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.911324" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.911167" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.910802" elapsed="0.000894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.914001" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:26.911842" elapsed="0.002187"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:26.914083" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:26.914251" 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-chromium/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-25T23:48:26.909625" elapsed="0.004661"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.915827" 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-25T23:48:26.915574" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.916276" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:26.916037" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.916715" 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-25T23:48:26.916473" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.917156" 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-25T23:48:26.916901" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:26.917992" 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-25T23:48:26.917786" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:26.918371" 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-25T23:48:26.918167" elapsed="0.000230"/>
</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-25T23:48:26.918542" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.919152" 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-25T23:48:26.918887" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:26.919237" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.919390" 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-25T23:48:26.917393" elapsed="0.002021"/>
</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-25T23:48:26.926020" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:26.926069" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:26.926166" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:26.921696" elapsed="0.004495"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.919489" elapsed="0.006747"/>
</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-25T23:48:26.926415" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.926262" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.919470" elapsed="0.007033"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.929740" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.927514" elapsed="0.002268"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.927297" elapsed="0.002521"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.927279" elapsed="0.002563"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.933247" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.930153" elapsed="0.003159"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.929898" elapsed="0.003519"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.929881" elapsed="0.003574"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.934236" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.933676" elapsed="0.000598"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.934693" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.934372" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.935466" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.935047" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.934806" elapsed="0.000747"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.934346" elapsed="0.001236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.936321" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.935797" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.936772" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.936456" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.937561" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.937146" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.936883" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.936430" elapsed="0.001246"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.937878" elapsed="0.000531"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:26.939039" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:26.938634" elapsed="0.000442"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.939283" elapsed="0.003248"/>
</kw>
<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="PASS" start="2026-04-25T23:48:26.926847" elapsed="0.015747"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:26.942773" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:48:26.942667" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.942648" elapsed="0.000210"/>
</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-25T23:48:26.943014" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:26.943082" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:26.945238" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:26.914615" elapsed="0.030649"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.945333" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.945484" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:26.767254" elapsed="0.178255"/>
</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-25T23:48:26.945851" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.945611" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.945594" elapsed="0.000350"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.946002" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:48:26.763029" elapsed="0.183096"/>
</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="PASS" start="2026-04-25T23:48:26.760847" elapsed="0.185378"/>
</kw>
<var name="${suffix}">10000</var>
<status status="PASS" start="2026-04-25T23:48:26.757061" elapsed="0.189200"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.946817" level="INFO">${count} = 3</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-25T23:48:26.946488" elapsed="0.000356"/>
</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-25T23:48:26.951285" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.950988" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:26.951356" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:26.951502" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:26.950638" elapsed="0.000888"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.952081" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:48:26.951689" elapsed="0.000419"/>
</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-25T23:48:26.984878" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:26.984511" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.985739" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:26.985436" elapsed="0.000369">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:26.985898" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:26.985075" elapsed="0.000847"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.986493" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:26.986109" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:26.986806" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:26.986934" 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-25T23:48:26.986672" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.987368" 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-25T23:48:26.987126" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.988557" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:26.988088" elapsed="0.000514"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.989193" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:26.988755" elapsed="0.000465"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.990273" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:26.989593" elapsed="0.000721"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:26.991992" level="INFO">${encoded} = working-pair-3</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-25T23:48:26.991592" elapsed="0.000438"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:26.992107" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:48:26.992446" level="INFO">${encoded_value} = working-pair-3</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-25T23:48:26.990764" elapsed="0.001723"/>
</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-25T23:48:26.992706" elapsed="0.000552"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:48:26.989433" elapsed="0.003925"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.989268" elapsed="0.004126"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:26.993437" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:26.993592" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:26.987762" elapsed="0.005888"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:26.987478" elapsed="0.006206"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:26.993855" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:26.993709" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:26.987460" elapsed="0.006472"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:26.994529" 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-25T23:48:26.994092" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:26.994605" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:26.983895" elapsed="0.010833"/>
</kw>
<msg time="2026-04-25T23:48:26.994779" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:26.971771" elapsed="0.023057"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.006919" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.018628" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.030352" 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-25T23:48:27.030538" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.030707" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.031077" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.030924" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.030909" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.031290" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.031450" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.031609" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.030881" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.030780" elapsed="0.000906"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.031824" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.031897" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:27.032021" 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-25T23:48:26.967657" elapsed="0.064390"/>
</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-25T23:48:27.055758" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:27.055389" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.056585" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:27.056303" elapsed="0.000346">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.056740" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.055942" elapsed="0.000822"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.057324" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:27.056920" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.057634" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.057755" 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-25T23:48:27.057503" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.058187" 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-25T23:48:27.057929" elapsed="0.000303"/>
</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-25T23:48:27.058582" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.058299" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.059105" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:48:27.058800" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.058663" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.058280" elapsed="0.000907"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.059843" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:27.059327" elapsed="0.000545"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.059920" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.054776" elapsed="0.005285"/>
</kw>
<msg time="2026-04-25T23:48:27.060122" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.042805" elapsed="0.017366"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.072270" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.084030" elapsed="0.000058"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.095795" 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-25T23:48:27.096009" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.096179" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.096529" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.096392" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.096377" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.096739" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.096897" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.097072" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.096350" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.096251" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.097288" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.097361" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:27.097477" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:27.041949" elapsed="0.055555"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.098718" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:27.098489" elapsed="0.000292">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.098870" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.098161" elapsed="0.000733"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.099217" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.098978" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.099749" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.099454" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.099296" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.098945" elapsed="0.000885"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.102108" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.099997" elapsed="0.002137"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:27.102184" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:27.102334" 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-chromium/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-25T23:48:27.097827" elapsed="0.004566"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.103901" 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-25T23:48:27.103657" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.104351" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:27.104115" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.104780" 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-25T23:48:27.104542" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.105220" 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-25T23:48:27.104982" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.106055" 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-25T23:48:27.105850" elapsed="0.000231"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:27.106394" 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-25T23:48:27.106224" elapsed="0.000194"/>
</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-25T23:48:27.106558" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.107156" 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-25T23:48:27.106896" elapsed="0.000304"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:27.107242" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:27.107407" 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-25T23:48:27.105460" elapsed="0.001972"/>
</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-25T23:48:27.114363" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:27.114411" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:27.114499" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:27.109662" elapsed="0.004863"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.107501" elapsed="0.007069"/>
</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-25T23:48:27.114743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.114596" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.107483" elapsed="0.007346"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.118086" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.115851" elapsed="0.002278"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.115631" elapsed="0.002532"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.115614" elapsed="0.002573"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.120711" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.118461" elapsed="0.002295"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.118241" elapsed="0.002548"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.118225" elapsed="0.002588"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.121346" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.120979" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.121664" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.121440" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.122242" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.121894" elapsed="0.000374"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.121744" elapsed="0.000559"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.121423" elapsed="0.000901"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.122863" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.122472" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.123228" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.122973" elapsed="0.000313"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.123845" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.123463" elapsed="0.000417"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.123310" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.122940" elapsed="0.001038"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.124178" elapsed="0.000471"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:27.125263" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.124866" elapsed="0.000433"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.125505" elapsed="0.003179"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.115189" elapsed="0.013582"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:27.129039" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.128871" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.128845" elapsed="0.000311"/>
</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-25T23:48:27.129351" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.129444" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:48:27.132429" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.102711" elapsed="0.029754"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.132561" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:48:27.132768" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:26.956776" elapsed="0.176026"/>
</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-25T23:48:27.133279" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.132942" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.132918" elapsed="0.000488"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.133451" elapsed="0.000036"/>
</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="PASS" start="2026-04-25T23:48:26.952352" elapsed="0.181267"/>
</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="PASS" start="2026-04-25T23:48:26.950175" elapsed="0.183528"/>
</kw>
<var name="${suffix}">15000</var>
<status status="PASS" start="2026-04-25T23:48:26.946357" elapsed="0.187392"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.134553" level="INFO">${count} = 4</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-25T23:48:27.134090" elapsed="0.000499"/>
</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-25T23:48:27.139228" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.138907" elapsed="0.000347"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:27.139298" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.139443" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.138565" elapsed="0.000902"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.140057" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:48:27.139660" elapsed="0.000425"/>
</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-25T23:48:27.172452" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.172078" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.173261" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.172952" elapsed="0.000372">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.173415" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.172634" elapsed="0.000805"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.173997" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:27.173594" elapsed="0.000431"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.174309" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.174453" 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-25T23:48:27.174178" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.174864" 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-25T23:48:27.174626" elapsed="0.000281"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.176072" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.175595" elapsed="0.000522"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.176674" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.176269" elapsed="0.000431"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.177741" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.177080" elapsed="0.000701"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.179440" level="INFO">${encoded} = working-pair-4</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-25T23:48:27.179068" elapsed="0.000408"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.179723" elapsed="0.000078"/>
</return>
<msg time="2026-04-25T23:48:27.180082" level="INFO">${encoded_value} = working-pair-4</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-25T23:48:27.178241" elapsed="0.001885"/>
</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-25T23:48:27.180348" elapsed="0.000515"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:48:27.176905" elapsed="0.004071"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.176745" elapsed="0.004270"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.181058" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:27.181212" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:27.175285" elapsed="0.005952"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.174994" elapsed="0.006273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.181438" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.181292" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.174974" elapsed="0.006539"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.182250" 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-25T23:48:27.181648" elapsed="0.000630"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.182326" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.171466" elapsed="0.010981"/>
</kw>
<msg time="2026-04-25T23:48:27.182531" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.159477" elapsed="0.023104"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.194431" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.206130" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.217770" 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-25T23:48:27.217976" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.218146" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.218503" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.218356" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.218341" elapsed="0.000240"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.218716" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.218875" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.219049" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.218314" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.218218" elapsed="0.000909"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.219264" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.219338" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:27.219445" 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-25T23:48:27.155428" elapsed="0.064043"/>
</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-25T23:48:27.242853" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:27.242487" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.243676" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:48:27.243382" elapsed="0.000358">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.243874" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.243060" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.244469" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:27.244078" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.244784" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.244913" 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-25T23:48:27.244653" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.245355" 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-25T23:48:27.245105" elapsed="0.000296"/>
</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-25T23:48:27.245744" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.245466" elapsed="0.000335"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.246275" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:48:27.245984" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.245825" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.245447" elapsed="0.000909"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.247022" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:27.246494" elapsed="0.000557"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.247098" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.241851" elapsed="0.005369"/>
</kw>
<msg time="2026-04-25T23:48:27.247271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.229906" elapsed="0.017412"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.259216" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.270827" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.282475" 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-25T23:48:27.282661" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.282827" 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-25T23:48:27.283239" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.283101" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.283086" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.283448" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.283605" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.283761" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.283058" elapsed="0.000755"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.282943" elapsed="0.000894"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.283988" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.284062" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:27.284176" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:27.229066" elapsed="0.055137"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.285445" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:48:27.285210" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.285605" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.284858" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.285934" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.285697" elapsed="0.000308"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.286470" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.286184" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.286029" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.285679" elapsed="0.000870"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.288783" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.286692" elapsed="0.002117"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:27.288857" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.289030" 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-chromium/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-25T23:48:27.284516" elapsed="0.004538"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.290632" 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-25T23:48:27.290279" elapsed="0.000399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.291083" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:27.290825" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.291510" 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-25T23:48:27.291271" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.291926" 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-25T23:48:27.291694" elapsed="0.000290"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.292774" 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-25T23:48:27.292582" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:27.293180" 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-25T23:48:27.293007" elapsed="0.000198"/>
</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-25T23:48:27.293346" elapsed="0.000192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.293925" 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-25T23:48:27.293683" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:27.294025" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:27.294177" 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-25T23:48:27.292176" elapsed="0.002026"/>
</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-25T23:48:27.302093" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:27.302140" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:27.302234" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:27.297347" elapsed="0.004912"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.294270" elapsed="0.008033"/>
</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-25T23:48:27.302479" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.302328" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.294252" elapsed="0.008314"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.305781" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.303561" elapsed="0.002264"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.303348" elapsed="0.002511"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.303330" elapsed="0.002554"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.308439" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.306167" elapsed="0.002319"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.305938" elapsed="0.002582"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.305922" elapsed="0.002622"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.309084" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.308699" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.309407" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.309180" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.310165" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.309724" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.309505" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.309162" elapsed="0.001120"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.311023" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.310495" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.311477" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.311159" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.312231" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.311801" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.311589" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.311134" elapsed="0.001224"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.312557" elapsed="0.000495"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:27.313649" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.313269" elapsed="0.000415"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.313940" elapsed="0.003210"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.302901" elapsed="0.014337"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:27.317491" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.317337" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.317311" elapsed="0.000324"/>
</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-25T23:48:27.317843" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.317937" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T23:48:27.320822" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.289361" elapsed="0.031488"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.320919" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.321091" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.144839" elapsed="0.176276"/>
</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-25T23:48:27.321444" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.321216" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.321198" elapsed="0.000338"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.321567" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:48:27.140328" elapsed="0.181359"/>
</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="PASS" start="2026-04-25T23:48:27.138115" elapsed="0.183631"/>
</kw>
<var name="${suffix}">20000</var>
<status status="PASS" start="2026-04-25T23:48:27.133873" elapsed="0.187905"/>
</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="PASS" start="2026-04-25T23:48:26.565602" elapsed="0.756204"/>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.322279" level="INFO">${count} = 4</msg>
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-25T23:48:27.321973" elapsed="0.000332"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.323882" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.323593" elapsed="0.000315"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:27.323952" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T23:48:27.324124" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.323257" elapsed="0.000892"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.324772" level="INFO">&amp;{mapping} = { ID=working-pair-1 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.324302" elapsed="0.000497"/>
</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-25T23:48:27.357546" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.357170" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.358358" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.358069" elapsed="0.000353">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.358553" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.357731" elapsed="0.000846"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.359141" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.358735" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.359461" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.359598" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:27.359322" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.360040" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.359773" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.361229" level="INFO">mapping: {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.360749" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.361833" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.361432" elapsed="0.000427"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.363082" 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-25T23:48:27.362244" elapsed="0.000878"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.364753" 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-25T23:48:27.364383" elapsed="0.000405"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.364864" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:48:27.365214" 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-25T23:48:27.363572" elapsed="0.001682"/>
</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-25T23:48:27.365471" elapsed="0.000520"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:48:27.362086" elapsed="0.004004"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.367030" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.366362" elapsed="0.000709"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.368868" level="INFO">${encoded} = 300</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-25T23:48:27.368501" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.368997" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:48:27.369331" level="INFO">${encoded_value} = 300</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-25T23:48:27.367539" elapsed="0.001830"/>
</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-25T23:48:27.369593" elapsed="0.000523"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:48:27.366207" elapsed="0.004008"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.371157" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.370488" elapsed="0.000709"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.372936" level="INFO">${encoded} = 5000</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-25T23:48:27.372569" elapsed="0.000418"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.373065" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:27.373396" level="INFO">${encoded_value} = 5000</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-25T23:48:27.371659" elapsed="0.001776"/>
</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-25T23:48:27.373652" elapsed="0.000516"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:48:27.370331" elapsed="0.003936"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.361904" elapsed="0.012400"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.374347" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.374543" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:27.360436" elapsed="0.014132"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.360150" elapsed="0.014450"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.374770" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.374625" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.360131" elapsed="0.014715"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.375452" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.374999" elapsed="0.000480"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.375528" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.356547" elapsed="0.019102"/>
</kw>
<msg time="2026-04-25T23:48:27.375700" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.344424" elapsed="0.031325"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.388072" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.400004" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.411831" 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-25T23:48:27.412036" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.412209" 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-25T23:48:27.412563" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.412425" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.412410" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.412773" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.412934" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.413111" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.412382" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.412283" elapsed="0.000908"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.413329" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.413438" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:27.413551" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:48:27.340266" elapsed="0.073310"/>
</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-25T23:48:27.437529" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.437156" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.438342" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.438056" elapsed="0.000370">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.438526" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.437714" elapsed="0.000836"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.439117" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:48:27.438707" elapsed="0.000437"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.439432" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.439556" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:48:27.439298" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.439994" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.439735" elapsed="0.000308"/>
</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-25T23:48:27.440394" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.440111" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.440910" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</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-25T23:48:27.440616" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.440478" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.440090" elapsed="0.000920"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.441728" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.441152" elapsed="0.000606"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.441806" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.436536" elapsed="0.005394"/>
</kw>
<msg time="2026-04-25T23:48:27.441999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.424207" elapsed="0.017841"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.453918" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.465800" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.477667" 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-25T23:48:27.477855" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.478060" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.478417" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.478278" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.478263" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.478627" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.478788" 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-25T23:48:27.478970" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.478235" elapsed="0.000790"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.478136" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.479190" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.479264" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:27.479382" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.423359" elapsed="0.056053"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.480631" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.480396" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.480787" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.480065" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.481135" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.480880" elapsed="0.000312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.481703" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.481411" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.481248" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.480861" elapsed="0.000925"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.484252" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.481942" elapsed="0.002337"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:27.484330" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:27.484485" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:27.479734" elapsed="0.004776"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.486055" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.485761" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.486486" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.486248" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.486920" 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-25T23:48:27.486679" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.487363" 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-25T23:48:27.487125" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.488396" 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-25T23:48:27.488199" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:27.488741" 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-25T23:48:27.488570" elapsed="0.000196"/>
</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-25T23:48:27.488908" elapsed="0.000213"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.489520" 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-25T23:48:27.489270" elapsed="0.000294"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:27.489606" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:27.489774" 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-25T23:48:27.487790" elapsed="0.002010"/>
</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-25T23:48:27.497411" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:27.497462" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:27.497550" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:27.491887" elapsed="0.005688"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.489871" elapsed="0.007749"/>
</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-25T23:48:27.497809" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.497647" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.489853" elapsed="0.008043"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.501271" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.498914" elapsed="0.002401"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.498693" elapsed="0.002657"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.498676" elapsed="0.002699"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.503954" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.501642" elapsed="0.002375"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.501429" elapsed="0.002623"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.501413" elapsed="0.002664"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.504641" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.504232" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.504984" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.504739" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.505548" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.505225" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.505069" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.504721" elapsed="0.000913"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.506174" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.505787" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.506556" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.506270" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.507326" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.506894" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.506682" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.506252" elapsed="0.001189"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.507641" elapsed="0.000496"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:27.508743" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.508357" elapsed="0.000422"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.509011" elapsed="0.003246"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.498263" elapsed="0.014087"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:27.512612" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.512462" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.512432" elapsed="0.000296"/>
</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-25T23:48:27.512924" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.513040" elapsed="0.000022"/>
</return>
<msg time="2026-04-25T23:48:27.516177" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.484825" elapsed="0.031391"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.516318" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:48:27.516539" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.329506" elapsed="0.187069"/>
</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-25T23:48:27.517078" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.516723" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.516699" elapsed="0.000516"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.517263" elapsed="0.000037"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:27.325061" elapsed="0.192417"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.322709" elapsed="0.194855"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:27.322526" elapsed="0.195144"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.519364" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.519066" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:27.519435" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.519580" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.518713" elapsed="0.000892"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.520253" level="INFO">&amp;{mapping} = { ID=working-pair-2 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.519759" elapsed="0.000522"/>
</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-25T23:48:27.552658" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.552290" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.553498" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.553213" elapsed="0.000348">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.553654" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.552840" elapsed="0.000838"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.554233" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.553832" elapsed="0.000427"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.554543" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.554667" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:27.554411" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.555114" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.554848" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.556299" level="INFO">mapping: {'ID': 'working-pair-2', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.555820" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.556916" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.556502" elapsed="0.000440"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.557998" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.557338" elapsed="0.000702"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.559641" level="INFO">${encoded} = working-pair-2</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-25T23:48:27.559274" elapsed="0.000402"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.559751" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:48:27.560098" level="INFO">${encoded_value} = working-pair-2</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-25T23:48:27.558476" elapsed="0.001661"/>
</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-25T23:48:27.560352" elapsed="0.000520"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:48:27.557179" elapsed="0.003821"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.561930" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.561278" elapsed="0.000708"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.563598" level="INFO">${encoded} = 300</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-25T23:48:27.563228" elapsed="0.000407"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.563747" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:48:27.564103" level="INFO">${encoded_value} = 300</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-25T23:48:27.562428" elapsed="0.001715"/>
</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-25T23:48:27.564363" elapsed="0.000529"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:48:27.561122" elapsed="0.003896"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.566120" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.565295" elapsed="0.000866"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.567899" level="INFO">${encoded} = 5000</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-25T23:48:27.567535" elapsed="0.000400"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.568027" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:27.568358" level="INFO">${encoded_value} = 5000</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-25T23:48:27.566599" elapsed="0.001798"/>
</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-25T23:48:27.568611" elapsed="0.000540"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:48:27.565137" elapsed="0.004111"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.557014" elapsed="0.012270"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.569326" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:27.569482" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:27.555509" elapsed="0.013998"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.555226" elapsed="0.014312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.569709" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.569568" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.555207" elapsed="0.014578"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.570464" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.569918" elapsed="0.000573"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.570538" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.551675" elapsed="0.018983"/>
</kw>
<msg time="2026-04-25T23:48:27.570709" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.539680" elapsed="0.031077"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.582748" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.594451" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.606286" 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-25T23:48:27.606514" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.606686" 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-25T23:48:27.607054" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.606901" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.606887" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.607267" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.607428" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.607586" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.606859" elapsed="0.000779"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.606761" elapsed="0.000903"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.607801" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.607874" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:27.608002" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:48:27.535567" elapsed="0.072462"/>
</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-25T23:48:27.631564" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.631195" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.632394" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.632103" elapsed="0.000354">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.632548" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.631748" elapsed="0.000824"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.633127" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:48:27.632727" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.633445" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.633566" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:48:27.633312" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.633995" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.633741" elapsed="0.000303"/>
</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-25T23:48:27.634388" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.634111" elapsed="0.000336"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.635102" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2', 'DURATION': 300, 'RATE': 5000}</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-25T23:48:27.634607" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.634471" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.634092" elapsed="0.001131"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.635994" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.635368" elapsed="0.000658"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.636076" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.630443" elapsed="0.005758"/>
</kw>
<msg time="2026-04-25T23:48:27.636255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.618454" elapsed="0.017849"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.648100" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.659921" elapsed="0.000048"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.671659" 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-25T23:48:27.671849" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.672037" 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-25T23:48:27.672389" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.672252" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.672237" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.672599" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.672760" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.672919" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.672210" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.672111" elapsed="0.000902"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.673152" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.673226" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:27.673341" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.617615" elapsed="0.055754"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.674663" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.674403" elapsed="0.000324">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.674818" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.674075" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.675173" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.674910" elapsed="0.000319"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.675706" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.675419" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.675252" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.674892" elapsed="0.000895"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.678053" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.675929" elapsed="0.002150"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:27.678128" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.678278" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:27.673744" elapsed="0.004558"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.679793" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.679549" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.680237" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.680000" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.680663" 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-25T23:48:27.680426" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.681096" 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-25T23:48:27.680845" elapsed="0.000293"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.681903" 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-25T23:48:27.681719" elapsed="0.000209"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:27.682258" 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-25T23:48:27.682088" elapsed="0.000196"/>
</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-25T23:48:27.682429" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.683229" 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-25T23:48:27.682769" elapsed="0.000506"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:27.683318" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:27.683471" 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-25T23:48:27.681329" elapsed="0.002167"/>
</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-25T23:48:27.689728" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:27.689809" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:27.689897" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:27.685584" elapsed="0.004338"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.683565" elapsed="0.006423"/>
</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-25T23:48:27.690160" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.690015" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.683547" elapsed="0.006699"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.693450" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.691241" elapsed="0.002251"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.691014" elapsed="0.002514"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.690996" elapsed="0.002557"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.696365" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.693817" elapsed="0.002611"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.693607" elapsed="0.002869"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.693590" elapsed="0.002921"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.697263" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.696725" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.697710" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.697395" elapsed="0.000393"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.698460" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.698052" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.697820" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.697370" elapsed="0.001210"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.699322" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.698789" elapsed="0.000569"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.699764" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.699452" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.700511" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.700108" elapsed="0.000438"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.699874" elapsed="0.000719"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.699427" elapsed="0.001196"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.700819" elapsed="0.000497"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:27.701911" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.701538" elapsed="0.000409"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.702174" elapsed="0.003218"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.690575" elapsed="0.014905"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:27.705729" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.705580" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.705555" elapsed="0.000290"/>
</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-25T23:48:27.706060" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.706154" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:48:27.708735" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.678610" elapsed="0.030151"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.708865" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:27.709038" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.524768" elapsed="0.184295"/>
</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-25T23:48:27.709399" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.709169" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.709150" elapsed="0.000343"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.709525" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:27.520528" elapsed="0.189118"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.518073" elapsed="0.191636"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:27.517791" elapsed="0.191957"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.711234" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.710917" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:27.711305" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:27.711448" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.710572" elapsed="0.000899"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.712114" level="INFO">&amp;{mapping} = { ID=working-pair-3 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.711624" elapsed="0.000517"/>
</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-25T23:48:27.744528" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.744163" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.745349" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.745047" elapsed="0.000369">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.745508" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.744710" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.746121" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.745716" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.746444" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.746570" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:27.746299" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.747147" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.746884" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.748349" level="INFO">mapping: {'ID': 'working-pair-3', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.747856" elapsed="0.000538"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.748969" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.748552" elapsed="0.000479"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.750087" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.749416" elapsed="0.000712"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.751793" level="INFO">${encoded} = working-pair-3</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-25T23:48:27.751419" elapsed="0.000410"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.751905" elapsed="0.000089"/>
</return>
<msg time="2026-04-25T23:48:27.752257" level="INFO">${encoded_value} = working-pair-3</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-25T23:48:27.750603" elapsed="0.001697"/>
</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-25T23:48:27.752521" elapsed="0.000530"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:48:27.749253" elapsed="0.003898"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.754099" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.753430" elapsed="0.000711"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.755914" level="INFO">${encoded} = 300</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-25T23:48:27.755545" elapsed="0.000405"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.756044" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:48:27.756378" level="INFO">${encoded_value} = 300</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-25T23:48:27.754596" elapsed="0.001822"/>
</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-25T23:48:27.756636" elapsed="0.000522"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:48:27.753268" elapsed="0.003988"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.758206" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.757528" elapsed="0.000720"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.759979" level="INFO">${encoded} = 5000</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-25T23:48:27.759601" elapsed="0.000416"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.760093" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:48:27.760424" level="INFO">${encoded_value} = 5000</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-25T23:48:27.758690" elapsed="0.001772"/>
</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-25T23:48:27.760678" elapsed="0.000520"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:48:27.757372" elapsed="0.003923"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.749082" elapsed="0.012249"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.761374" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:27.761529" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:27.747546" elapsed="0.014008"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.747255" elapsed="0.014331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.761752" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.761610" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.747237" elapsed="0.014590"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.762444" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.761976" elapsed="0.000496"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.762520" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.743548" elapsed="0.019092"/>
</kw>
<msg time="2026-04-25T23:48:27.762691" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.731402" elapsed="0.031337"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.774836" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.786486" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.798111" 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-25T23:48:27.798336" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.798511" 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-25T23:48:27.798861" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.798725" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.798710" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.799088" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.799247" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.799407" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.798683" elapsed="0.000778"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.798585" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.799621" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.799694" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:27.799803" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:48:27.727348" elapsed="0.072480"/>
</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-25T23:48:27.824427" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.824053" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.825244" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:27.824940" elapsed="0.000369">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.825412" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.824611" elapsed="0.000824"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.826030" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:48:27.825623" elapsed="0.000434"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.826341" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.826464" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:48:27.826208" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.826878" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.826639" elapsed="0.000286"/>
</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-25T23:48:27.827292" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.827009" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.827810" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3', 'DURATION': 300, 'RATE': 5000}</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-25T23:48:27.827519" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.827376" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.826989" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.828618" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.828046" elapsed="0.000602"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.828696" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.823436" elapsed="0.005382"/>
</kw>
<msg time="2026-04-25T23:48:27.828871" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.810276" elapsed="0.018643"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.840655" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.852305" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.863934" elapsed="0.000038"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.864133" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.864337" 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-25T23:48:27.864691" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.864554" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.864539" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.864915" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.865102" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.865262" elapsed="0.000026"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.864512" elapsed="0.000809"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.864412" elapsed="0.000934"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.865483" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.865556" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:27.865672" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:27.809407" elapsed="0.056294"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.866912" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.866682" elapsed="0.000310">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.867085" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.866351" elapsed="0.000759"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.867416" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.867179" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.867940" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.867655" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.867496" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.867161" elapsed="0.000877"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.870473" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.868182" elapsed="0.002318"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:27.870550" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.870701" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:27.866036" elapsed="0.004689"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.872231" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.871981" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.872659" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.872422" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.873133" 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-25T23:48:27.872863" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.873560" 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-25T23:48:27.873322" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.874439" 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-25T23:48:27.874252" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:27.874782" 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-25T23:48:27.874613" elapsed="0.000194"/>
</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-25T23:48:27.874947" elapsed="0.000212"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.875552" 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-25T23:48:27.875307" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:27.875637" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:27.875789" 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-25T23:48:27.873843" elapsed="0.001970"/>
</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-25T23:48:27.882163" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:27.882214" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:27.882312" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:27.877871" elapsed="0.004466"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.875882" elapsed="0.006500"/>
</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-25T23:48:27.882557" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.882410" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.875864" elapsed="0.006780"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.885919" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.883641" elapsed="0.002336"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.883426" elapsed="0.002588"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.883408" elapsed="0.002631"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.888765" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.886309" elapsed="0.002503"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.886094" elapsed="0.002753"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.886077" elapsed="0.002796"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.889440" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.889055" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.889907" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.889581" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.890677" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.890261" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.890044" elapsed="0.000718"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.889555" elapsed="0.001238"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.891532" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.891029" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.892001" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.891665" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.892753" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.892331" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.892116" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.891640" elapsed="0.001227"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.893090" elapsed="0.000471"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:27.894236" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.893830" elapsed="0.000443"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.894480" elapsed="0.003318"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.882997" elapsed="0.014888"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:27.898155" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.898007" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.897979" elapsed="0.000294"/>
</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-25T23:48:27.898469" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.898563" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:48:27.901600" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.871051" elapsed="0.030575"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.901696" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:27.901845" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.716773" elapsed="0.185097"/>
</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-25T23:48:27.902220" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.901988" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.901955" elapsed="0.000358"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.902346" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:27.712386" elapsed="0.190081"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.710032" elapsed="0.192493"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:27.709834" elapsed="0.192730"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.904036" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.903724" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:27.904108" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.904253" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.903379" elapsed="0.000898"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.904923" level="INFO">&amp;{mapping} = { ID=working-pair-4 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.904442" elapsed="0.000509"/>
</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-25T23:48:27.938586" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:27.938215" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.939403" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:27.939113" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:27.939600" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:27.938770" elapsed="0.000855"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.940207" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.939782" elapsed="0.000452"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:27.940522" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:27.940645" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:27.940389" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.941088" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.940819" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.942285" level="INFO">mapping: {'ID': 'working-pair-4', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.941800" elapsed="0.000532"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.942896" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.942486" elapsed="0.000437"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.944014" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.943315" elapsed="0.000742"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.945698" level="INFO">${encoded} = working-pair-4</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-25T23:48:27.945322" elapsed="0.000413"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.945812" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:27.946167" level="INFO">${encoded_value} = working-pair-4</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-25T23:48:27.944507" elapsed="0.001700"/>
</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-25T23:48:27.946428" elapsed="0.000524"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:48:27.943155" elapsed="0.003912"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.948063" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.947343" elapsed="0.000761"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.949730" level="INFO">${encoded} = 300</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-25T23:48:27.949360" elapsed="0.000406"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.949844" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:48:27.950195" level="INFO">${encoded_value} = 300</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-25T23:48:27.948549" elapsed="0.001686"/>
</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-25T23:48:27.950457" elapsed="0.000530"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:48:27.947185" elapsed="0.003902"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.952226" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:27.951363" elapsed="0.000904"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:27.954149" level="INFO">${encoded} = 5000</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-25T23:48:27.953641" elapsed="0.000545"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:27.954261" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:48:27.954594" level="INFO">${encoded_value} = 5000</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-25T23:48:27.952710" elapsed="0.001923"/>
</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-25T23:48:27.954853" elapsed="0.000521"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:48:27.951204" elapsed="0.004267"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.942985" elapsed="0.012523"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:27.955553" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:27.955763" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:27.941485" elapsed="0.014304"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:27.941200" elapsed="0.014621"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.956015" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.955847" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.941181" elapsed="0.014914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.956678" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:27.956234" elapsed="0.000471"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:27.956754" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.937583" elapsed="0.019293"/>
</kw>
<msg time="2026-04-25T23:48:27.956928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:27.925145" elapsed="0.031847"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.969022" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.980883" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.992676" 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-25T23:48:27.992865" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.993048" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.993412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.993273" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:27.993258" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.993623" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.993783" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.993949" elapsed="0.000035"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:27.993230" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.993124" elapsed="0.000919"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.994181" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.994290" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:27.994403" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:48:27.920897" elapsed="0.073532"/>
</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-25T23:48:28.018075" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:28.017691" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.018941" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:48:28.018581" elapsed="0.000455">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.019130" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.018258" elapsed="0.000897"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.019693" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:48:28.019313" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.020027" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.020162" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:48:28.019875" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.020587" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.020341" elapsed="0.000293"/>
</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-25T23:48:28.020997" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.020700" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.021706" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4', 'DURATION': 300, 'RATE': 5000}</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-25T23:48:28.021220" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.021082" elapsed="0.000687"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.020682" elapsed="0.001109"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.022519" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:28.021931" elapsed="0.000618"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.022599" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.017091" elapsed="0.005632"/>
</kw>
<msg time="2026-04-25T23:48:28.022787" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.005024" elapsed="0.017812"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.034736" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.046688" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.058426" 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-25T23:48:28.058613" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.058780" elapsed="0.000026"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.059161" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.059021" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.059005" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.059371" 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-25T23:48:28.059530" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.059687" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.058975" elapsed="0.000763"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.058859" elapsed="0.000904"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.059900" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.059988" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:28.060107" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:48:28.004168" elapsed="0.055967"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.061352" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.061118" elapsed="0.000297">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.061506" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.060772" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.061843" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.061599" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.062434" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.062134" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.061971" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.061581" elapsed="0.000935"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.064763" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.062662" elapsed="0.002127"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:28.064839" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.065006" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:28.060457" elapsed="0.004574"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.066544" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.066295" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.066985" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.066734" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.067415" 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-25T23:48:28.067178" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.067833" 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-25T23:48:28.067600" elapsed="0.000275"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:28.068666" 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-25T23:48:28.068483" elapsed="0.000215"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:28.069035" 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-25T23:48:28.068844" elapsed="0.000216"/>
</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-25T23:48:28.069201" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.069978" 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-25T23:48:28.069542" elapsed="0.000482"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:28.070067" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.070467" 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-25T23:48:28.068089" elapsed="0.002403"/>
</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-25T23:48:28.077248" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.077298" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:28.077384" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:48:28.072807" elapsed="0.004602"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.070562" elapsed="0.006891"/>
</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-25T23:48:28.077627" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.077479" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.070545" elapsed="0.007168"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.081018" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.078761" elapsed="0.002300"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.078540" elapsed="0.002556"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.078520" elapsed="0.002601"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.083635" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.081386" elapsed="0.002294"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.081175" elapsed="0.002538"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.081159" elapsed="0.002579"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.084314" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.083891" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.084638" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.084411" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.085187" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.084871" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.084719" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.084393" elapsed="0.000877"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.085780" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.085424" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.086150" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.085874" elapsed="0.000332"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.086786" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.086381" elapsed="0.000440"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.086230" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.085857" elapsed="0.001041"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.087118" elapsed="0.000473"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:28.088207" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.087810" elapsed="0.000433"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.088449" elapsed="0.003262"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.078091" elapsed="0.013708"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:28.092072" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.091900" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.091873" elapsed="0.000317"/>
</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-25T23:48:28.092388" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.092481" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:48:28.095504" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:28.065344" elapsed="0.030196"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.095637" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:48:28.095848" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:48:27.909567" elapsed="0.186315"/>
</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-25T23:48:28.096375" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.096054" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.096029" elapsed="0.000475"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.096550" elapsed="0.000035"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:27.905224" elapsed="0.191495"/>
</kw>
<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="PASS" start="2026-04-25T23:48:27.902826" elapsed="0.193976"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:48:27.902647" elapsed="0.194260"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-25T23:48:27.322354" elapsed="0.774595"/>
</for>
<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-25T23:48:28.097661" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:48:28.098013" level="INFO">${getter} = ['Get_Notifications_Active_Status', ['1', 4], {}]</msg>
<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="PASS" start="2026-04-25T23:48:28.097254" elapsed="0.000797"/>
</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-25T23:48:28.098615" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:28.098818" level="INFO">${validator} = ['Check_Notifications_Active_Status', ['data_holder'], {}]</msg>
<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="PASS" start="2026-04-25T23:48:28.098334" elapsed="0.000509"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.099389" level="INFO">${validation_timeout_in_seconds} = 1020.0</msg>
<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="PASS" start="2026-04-25T23:48:28.099013" elapsed="0.000402"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.101196" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.100777" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.100760" elapsed="0.000519"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:48:28.101732" level="INFO">${period_in_seconds} = 600.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:48:28.101418" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.102074" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.101830" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.101812" elapsed="0.000341"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:48:28.102463" level="INFO">${date_now} = 2026-04-25 23:48:28.102</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:48:28.102293" elapsed="0.000197"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:48:28.102897" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:48:28.102635" elapsed="0.000287"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-25T23:48:28.103410" level="INFO">${date_deadline} = 2026-04-26 00:05:28.102</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-25T23:48:28.103095" elapsed="0.000341"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-25T23:48:28.103483" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.103720" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<msg time="2026-04-25T23:48:28.103765" level="INFO">${period_in_seconds} = 600.0</msg>
<msg time="2026-04-25T23:48:28.103806" level="INFO">${date_deadline} = 2026-04-26 00:05:28.102</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-25T23:48:28.100430" elapsed="0.003398"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.104365" level="INFO">${iterations} = 1.7</msg>
<var>${iterations}</var>
<arg>${timeout_in_seconds} / ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.104001" elapsed="0.000390"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.106447" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:48:28.106494" level="INFO">${args} = ['1', 4]</msg>
<msg time="2026-04-25T23:48:28.106536" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.106152" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.107809" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:28.107572" elapsed="0.000263"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.110203" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.109424" elapsed="0.000858"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:28.110411" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:28.110673" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:28.108949" elapsed="0.001749"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.111359" 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-25T23:48:28.110853" elapsed="0.000533"/>
</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-25T23:48:28.147150" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.146766" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.147875" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.147654" elapsed="0.000284">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.148048" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.147335" elapsed="0.000736"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.148605" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.148227" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.148918" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.149062" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:28.148786" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.149496" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.149249" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.150467" 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-25T23:48:28.150215" elapsed="0.000297"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.150921" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.150663" elapsed="0.000284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.151585" 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-25T23:48:28.151297" elapsed="0.000313"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:28.152321" 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-25T23:48:28.152110" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:28.152395" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.152544" 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-25T23:48:28.151786" elapsed="0.000783"/>
</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-25T23:48:28.152712" elapsed="0.000221"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:48:28.151171" elapsed="0.001834"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.151008" elapsed="0.002054"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.153104" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:28.153258" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:28.149887" elapsed="0.003395"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.149605" elapsed="0.003709"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.153480" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.153338" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.149586" elapsed="0.003970"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.154283" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.153690" elapsed="0.000621"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.154359" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.146171" elapsed="0.008309"/>
</kw>
<msg time="2026-04-25T23:48:28.154567" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.134228" elapsed="0.020391"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.166452" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.178157" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.189788" 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-25T23:48:28.189993" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.190163" 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-25T23:48:28.190513" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.190377" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.190362" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.190722" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.190881" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.191053" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.190335" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.190237" elapsed="0.000896"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.191269" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.191343" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.191477" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:48:28.129852" elapsed="0.061665"/>
</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-25T23:48:28.215186" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.214804" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.215900" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.215687" elapsed="0.000292">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.216110" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.215368" elapsed="0.000766"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.216681" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:48:28.216304" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.217009" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.217131" 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-25T23:48:28.216859" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.217545" 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-25T23:48:28.217307" elapsed="0.000283"/>
</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-25T23:48:28.217936" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.217655" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.218466" 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-25T23:48:28.218176" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.218036" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.217636" elapsed="0.000912"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.219224" 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-25T23:48:28.218686" elapsed="0.000567"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.219301" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.214208" elapsed="0.005215"/>
</kw>
<msg time="2026-04-25T23:48:28.219473" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.202248" elapsed="0.017274"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.231371" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.243113" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.254762" 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-25T23:48:28.254993" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.255163" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.255512" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.255375" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.255360" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.255737" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.255898" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.256083" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.255333" elapsed="0.000804"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.255235" elapsed="0.000927"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.256298" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.256372" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.256513" 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-25T23:48:28.201274" elapsed="0.055282"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.258036" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.257785" elapsed="0.000317">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.258192" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.257453" elapsed="0.000763"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.258527" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.258286" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.259066" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.258762" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.258607" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.258267" elapsed="0.000880"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.261404" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.259291" elapsed="0.002139"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:28.261480" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:28.261653" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:28.257007" elapsed="0.004686"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.263435" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.263187" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.263879" 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-25T23:48:28.263639" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.264331" 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-25T23:48:28.264093" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.264750" 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-25T23:48:28.264516" elapsed="0.000276"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:28.265617" 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-25T23:48:28.265431" elapsed="0.000211"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:28.265981" 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-25T23:48:28.265787" elapsed="0.000222"/>
</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-25T23:48:28.266154" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.266752" 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-25T23:48:28.266510" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:28.266838" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.267009" 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-25T23:48:28.265039" elapsed="0.001995"/>
</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-25T23:48:28.273690" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:48:28.273998" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '140'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3883&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.274096" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:28.269257" elapsed="0.004864"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.267105" elapsed="0.007062"/>
</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-25T23:48:28.274341" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.274192" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.267087" elapsed="0.007342"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.277697" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3883&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.275428" elapsed="0.002318"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.275205" elapsed="0.002576"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.275187" elapsed="0.002618"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.280355" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.278092" elapsed="0.002309"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.277860" elapsed="0.002575"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.277843" elapsed="0.002616"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.281213" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.280677" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.281668" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.281347" elapsed="0.000401"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.282430" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.282013" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.281780" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.281321" elapsed="0.001221"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.283270" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.282751" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.283732" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.283416" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.284479" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.284074" elapsed="0.000440"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.283842" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.283391" elapsed="0.001243"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.284838" elapsed="0.000495"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:28.285927" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.285553" elapsed="0.000429"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.286188" elapsed="0.003187"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.274762" elapsed="0.014707"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:28.289717" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.289570" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.289544" elapsed="0.000290"/>
</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-25T23:48:28.290051" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.290147" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:48:28.292760" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3883&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.262133" elapsed="0.030671"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.292943" elapsed="0.000095"/>
</return>
<msg time="2026-04-25T23:48:28.293262" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3883&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.117115" elapsed="0.176227"/>
</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-25T23:48:28.294082" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.293532" elapsed="0.000649"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.293512" elapsed="0.000718"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.294279" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.294549" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3883&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:28.111706" elapsed="0.182871"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:28.295216" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b0f9490&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:28.294736" elapsed="0.000508"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.295794" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.295394" elapsed="0.000426"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.296399" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.296003" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.297113" elapsed="0.000598"/>
</kw>
<msg time="2026-04-25T23:48:28.297844" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.297888" level="INFO">${publish_count} = 3883</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.296580" elapsed="0.001330"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.298290" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.298006" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.297986" elapsed="0.000512"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.299231" level="INFO">${publish_count} = 3883</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.298643" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.300638" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.299937" elapsed="0.000883">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:48:28.300975" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:28.301021" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.299417" elapsed="0.001627"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.301400" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.301120" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.301101" elapsed="0.000470"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.308050" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.301714" elapsed="0.006364"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:48:28.308130" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.308357" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:48:28.308400" level="INFO">${publ_count} = 3883</msg>
<msg time="2026-04-25T23:48:28.308439" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:48:28.108452" elapsed="0.200009"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.308614" elapsed="0.000228"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:28.309008" elapsed="0.005880"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:28.108077" elapsed="0.206895"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.317185" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.316448" elapsed="0.000817"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:28.317395" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:28.317657" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:28.315928" elapsed="0.001754"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.318347" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:48:28.317837" elapsed="0.000537"/>
</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-25T23:48:28.354662" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.354273" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.355407" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.355189" elapsed="0.000281">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.355561" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.354845" elapsed="0.000740"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.356130" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.355740" elapsed="0.000417"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.356439" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.356564" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:28.356308" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.357030" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.356774" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.358160" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.357886" elapsed="0.000319"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.358633" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.358372" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.359307" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:28.359015" elapsed="0.000318"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:28.360048" level="INFO">${encoded} = working-pair-2</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-25T23:48:28.359823" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:28.360122" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.360271" level="INFO">${encoded_value} = working-pair-2</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-25T23:48:28.359516" elapsed="0.000779"/>
</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-25T23:48:28.360438" elapsed="0.000221"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:48:28.358868" elapsed="0.001831"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.358705" elapsed="0.002027"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.360774" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.360926" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:28.357423" elapsed="0.003527"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.357140" elapsed="0.003858"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.361165" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.361023" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.357121" elapsed="0.004126"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.361804" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.361382" elapsed="0.000448"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.361877" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.353657" elapsed="0.008358"/>
</kw>
<msg time="2026-04-25T23:48:28.362067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.341477" elapsed="0.020642"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.373882" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.385565" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.397286" 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-25T23:48:28.397508" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.397676" 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-25T23:48:28.398078" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.397915" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.397900" elapsed="0.000259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.398293" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.398454" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.398612" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.397870" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.397749" elapsed="0.000940"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.398826" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.398900" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.399048" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:48:28.337151" elapsed="0.061938"/>
</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-25T23:48:28.423171" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.422782" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.423894" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.423681" elapsed="0.000291">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.424068" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.423356" elapsed="0.000736"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.424627" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:48:28.424250" elapsed="0.000404"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.424939" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.425076" 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-25T23:48:28.424807" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.425506" 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-25T23:48:28.425253" elapsed="0.000300"/>
</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-25T23:48:28.425903" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.425620" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.426479" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:48:28.426185" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.426040" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.425601" elapsed="0.000962"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.427238" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:28.426702" elapsed="0.000566"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.427316" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.422180" elapsed="0.005261"/>
</kw>
<msg time="2026-04-25T23:48:28.427495" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.409871" elapsed="0.017675"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.439278" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.451087" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.462772" 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-25T23:48:28.462975" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.463147" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.463500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.463362" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.463348" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.463710" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.463869" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.464042" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.463320" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.463221" elapsed="0.000901"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.464261" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.464335" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.464475" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:28.408870" elapsed="0.055681"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.466055" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.465802" elapsed="0.000317">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.466209" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.465468" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.466541" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.466305" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.467079" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.466774" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.466620" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.466285" elapsed="0.000875"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.469602" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.467304" elapsed="0.002324"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:28.469680" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.469858" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:28.465019" elapsed="0.004879"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.471652" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.471401" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.472099" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:48:28.471844" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.472534" 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-25T23:48:28.472292" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.472996" 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-25T23:48:28.472721" elapsed="0.000320"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:28.473815" 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-25T23:48:28.473630" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:28.474188" 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-25T23:48:28.474015" elapsed="0.000198"/>
</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-25T23:48:28.474356" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.474944" 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-25T23:48:28.474700" elapsed="0.000304"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:28.475046" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.475201" 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-25T23:48:28.473237" elapsed="0.001988"/>
</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-25T23:48:28.481630" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.481832" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '140'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3952&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.481994" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:28.477296" elapsed="0.004727"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.475294" elapsed="0.006774"/>
</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-25T23:48:28.482241" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.482094" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.475277" elapsed="0.007053"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.485643" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3952&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.483336" elapsed="0.002357"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.483119" elapsed="0.002609"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.483101" elapsed="0.002652"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.488421" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.486035" elapsed="0.002431"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.485808" elapsed="0.002693"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.485791" elapsed="0.002734"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.489099" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.488681" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.489422" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.489196" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.490172" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.489738" elapsed="0.000470"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.489522" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.489177" elapsed="0.001110"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.491015" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.490497" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.491468" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.491150" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.492231" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.491792" elapsed="0.000475"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.491580" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.491124" elapsed="0.001221"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.492542" elapsed="0.000511"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:28.493645" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.493272" elapsed="0.000408"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.493885" elapsed="0.003216"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.482674" elapsed="0.014515"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:28.497437" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.497289" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.497263" elapsed="0.000291"/>
</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-25T23:48:28.497749" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.497842" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:48:28.501004" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3952&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.470349" elapsed="0.030720"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.501313" elapsed="0.000112"/>
</return>
<msg time="2026-04-25T23:48:28.501693" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3952&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.324154" elapsed="0.177620"/>
</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-25T23:48:28.502531" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.501986" elapsed="0.000643"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.501946" elapsed="0.000732"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.502726" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.503006" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;3952&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:28.318647" elapsed="0.184389"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:28.503628" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ab78c20&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:28.503193" elapsed="0.000462"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.504211" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.503804" elapsed="0.000433"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.504794" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.504387" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.505519" elapsed="0.000619"/>
</kw>
<msg time="2026-04-25T23:48:28.506272" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.506316" level="INFO">${publish_count} = 3952</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.504996" elapsed="0.001343"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.506696" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.506416" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.506396" elapsed="0.000473"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.507596" level="INFO">${publish_count} = 3952</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.507032" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.508972" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.508320" elapsed="0.000839">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:48:28.509300" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:28.509344" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.507782" elapsed="0.001585"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.509720" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.509442" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.509423" elapsed="0.000470"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.515392" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.510118" elapsed="0.005303"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:48:28.515474" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:28.515701" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:48:28.515781" level="INFO">${publ_count} = 3952</msg>
<msg time="2026-04-25T23:48:28.515824" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:48:28.315438" elapsed="0.200409"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.516017" elapsed="0.000230"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:28.516398" elapsed="0.006129"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:28.315075" elapsed="0.207492"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.524745" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.523995" elapsed="0.000830"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:28.524972" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:28.525237" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:28.523531" elapsed="0.001731"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.525902" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:48:28.525417" elapsed="0.000512"/>
</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-25T23:48:28.561811" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.561442" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.562563" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.562341" elapsed="0.000285">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.562718" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.562011" elapsed="0.000730"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.563291" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.562897" elapsed="0.000420"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.563601" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.563723" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:28.563470" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.564180" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.563913" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.565302" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.564887" elapsed="0.000460"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.565762" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.565502" elapsed="0.000286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.566434" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:28.566143" elapsed="0.000316"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:28.567171" level="INFO">${encoded} = working-pair-3</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-25T23:48:28.566947" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:28.567245" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.567393" level="INFO">${encoded_value} = working-pair-3</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-25T23:48:28.566636" elapsed="0.000781"/>
</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-25T23:48:28.567560" elapsed="0.000221"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:48:28.566015" elapsed="0.001850"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.565835" elapsed="0.002069"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.567970" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.568130" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:28.564577" elapsed="0.003578"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.564290" elapsed="0.003896"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.568353" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.568210" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.564271" elapsed="0.004158"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.569003" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.568565" elapsed="0.000466"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.569078" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.560826" elapsed="0.008374"/>
</kw>
<msg time="2026-04-25T23:48:28.569251" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.548745" elapsed="0.020556"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.581055" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.592761" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.604411" 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-25T23:48:28.604598" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.604765" 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-25T23:48:28.605131" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.604993" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.604977" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.605341" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.605500" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.605656" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.604935" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.604838" elapsed="0.000896"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.605907" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.606000" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:28.606136" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:48:28.544425" elapsed="0.061751"/>
</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-25T23:48:28.630196" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.629810" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.630909" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.630697" elapsed="0.000290">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.631082" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.630379" elapsed="0.000726"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.631661" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:48:28.631284" elapsed="0.000404"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.631987" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.632110" 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-25T23:48:28.631840" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.632526" 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-25T23:48:28.632285" elapsed="0.000286"/>
</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-25T23:48:28.632919" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.632637" elapsed="0.000357"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.633451" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:48:28.633161" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.633020" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.632618" elapsed="0.000915"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.634209" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:28.633672" elapsed="0.000566"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.634286" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.629205" elapsed="0.005204"/>
</kw>
<msg time="2026-04-25T23:48:28.634461" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.616980" elapsed="0.017531"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.646146" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.657948" elapsed="0.000046"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.669587" 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-25T23:48:28.669774" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.669941" elapsed="0.000034"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.670306" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.670169" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.670154" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.670516" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.670687" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.670849" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.670127" elapsed="0.000774"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.670029" elapsed="0.000897"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.671086" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.671162" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.671304" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:28.615998" elapsed="0.055348"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.672809" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.672577" elapsed="0.000294">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.672978" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.672246" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.673309" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.673075" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.673833" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.673544" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.673389" elapsed="0.000539"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.673056" elapsed="0.000893"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.676405" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.674113" elapsed="0.002318"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:28.676482" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.676659" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:28.671779" elapsed="0.004920"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.678465" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.678215" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.678919" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:48:28.678681" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.679421" 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-25T23:48:28.679178" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.679845" 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-25T23:48:28.679607" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:28.680674" 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-25T23:48:28.680489" elapsed="0.000211"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:28.681033" 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-25T23:48:28.680846" elapsed="0.000212"/>
</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-25T23:48:28.681200" elapsed="0.000192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.681779" 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-25T23:48:28.681539" elapsed="0.000283"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:28.681863" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.682041" 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-25T23:48:28.680095" elapsed="0.001971"/>
</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-25T23:48:28.688469" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.688745" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '140'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4033&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.688877" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:28.684141" elapsed="0.004770"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.682137" elapsed="0.006864"/>
</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-25T23:48:28.689243" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.689038" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.682119" elapsed="0.007245"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.694111" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4033&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.690748" elapsed="0.003432"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.690437" elapsed="0.003790"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.690412" elapsed="0.003849"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.697979" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.694666" elapsed="0.003378"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.694337" elapsed="0.003754"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.694314" elapsed="0.003812"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.698931" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.698414" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.699410" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.699091" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.699979" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.699670" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.699519" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.699065" elapsed="0.000997"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.700567" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.700213" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.700882" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.700660" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.701422" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.701133" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.700977" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.700642" elapsed="0.000866"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.701648" elapsed="0.000353"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:28.702439" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.702157" elapsed="0.000307"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.702611" elapsed="0.002272"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.689825" elapsed="0.015120"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:28.705142" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.705035" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.705015" elapsed="0.000210"/>
</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-25T23:48:28.705364" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.705430" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:28.707647" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4033&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.677160" elapsed="0.030532"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.707830" elapsed="0.000071"/>
</return>
<msg time="2026-04-25T23:48:28.708147" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4033&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.531624" elapsed="0.176604"/>
</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-25T23:48:28.708947" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.708416" elapsed="0.000648"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.708397" elapsed="0.000715"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.709160" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.709424" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4033&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:28.526245" elapsed="0.183241"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:28.710082" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0af54590&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:28.709648" elapsed="0.000461"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.710700" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.710282" elapsed="0.000444"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.711291" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.710875" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.712005" elapsed="0.000594"/>
</kw>
<msg time="2026-04-25T23:48:28.712733" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.712777" level="INFO">${publish_count} = 4033</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.711473" elapsed="0.001325"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.713184" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.712874" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.712855" elapsed="0.000500"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.714073" level="INFO">${publish_count} = 4033</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.713499" elapsed="0.000601"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.715417" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.714786" elapsed="0.000814">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:48:28.715739" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:28.715783" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.714272" elapsed="0.001533"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.716175" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.715881" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.715863" elapsed="0.000482"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.721780" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.716487" elapsed="0.005319"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:48:28.721857" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.722123" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:48:28.722169" level="INFO">${publ_count} = 4033</msg>
<msg time="2026-04-25T23:48:28.722208" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:48:28.523040" elapsed="0.199189"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.722384" elapsed="0.000225"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:28.722763" elapsed="0.005867"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:28.522667" elapsed="0.206004"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.731056" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.730316" elapsed="0.000820"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:28.731264" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:28.731528" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:28.729842" elapsed="0.001711"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.732211" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:48:28.731706" elapsed="0.000532"/>
</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-25T23:48:28.768131" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.767745" elapsed="0.000456"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.768902" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.768686" elapsed="0.000294">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.769076" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.768361" elapsed="0.000739"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.769662" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.769257" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.769994" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.770119" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:28.769843" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.770535" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.770292" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.771646" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.771390" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.772119" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.771843" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.772772" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:48:28.772483" elapsed="0.000314"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:48:28.773522" level="INFO">${encoded} = working-pair-4</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-25T23:48:28.773301" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:48:28.773598" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:28.773749" level="INFO">${encoded_value} = working-pair-4</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-25T23:48:28.772991" elapsed="0.000782"/>
</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-25T23:48:28.773925" elapsed="0.000244"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:48:28.772354" elapsed="0.001856"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.772190" elapsed="0.002054"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:28.774286" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:28.774439" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:28.770927" elapsed="0.003537"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.770644" elapsed="0.003851"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.774663" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.774520" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.770625" elapsed="0.004113"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.775316" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.774872" elapsed="0.000471"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.775391" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.767146" elapsed="0.008365"/>
</kw>
<msg time="2026-04-25T23:48:28.775561" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.755032" elapsed="0.020614"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.787345" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.798916" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.810513" 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-25T23:48:28.810700" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.810869" 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-25T23:48:28.811235" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.811098" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.811083" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.811446" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.811606" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.811762" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.811055" elapsed="0.000760"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.810942" elapsed="0.000897"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.811994" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.812070" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:48:28.812205" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:48:28.750819" elapsed="0.061426"/>
</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-25T23:48:28.836820" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.836438" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.837566" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:48:28.837352" elapsed="0.000276">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.837757" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.837027" elapsed="0.000755"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.838342" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:48:28.837940" elapsed="0.000429"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.838655" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:28.838782" 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-25T23:48:28.838523" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.839222" 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-25T23:48:28.838978" elapsed="0.000290"/>
</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-25T23:48:28.839615" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.839334" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.840144" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:48:28.839837" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.839699" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.839315" elapsed="0.000911"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.840911" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:28.840364" elapsed="0.000576"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.841019" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:28.835822" elapsed="0.005324"/>
</kw>
<msg time="2026-04-25T23:48:28.841198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.822940" elapsed="0.018309"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.852947" elapsed="0.000048"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.864663" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.876473" 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-25T23:48:28.876661" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.876828" elapsed="0.000051"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.877233" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.877095" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:28.877080" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.877446" 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-25T23:48:28.877607" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.877765" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:28.877052" elapsed="0.000766"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.876935" elapsed="0.000908"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.877994" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.878071" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.878212" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:28.821986" elapsed="0.056269"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:28.879718" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.879486" elapsed="0.000294">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:28.879871" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:28.879153" elapsed="0.000742"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.880220" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.879980" elapsed="0.000308"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.880757" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.880469" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.880313" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.879945" elapsed="0.000893"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.883249" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.880999" elapsed="0.002277"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:28.883327" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.883506" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:28.878685" elapsed="0.004860"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.885324" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.885071" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.885752" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:48:28.885515" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.886197" 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-25T23:48:28.885940" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.886618" 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-25T23:48:28.886383" elapsed="0.000277"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:28.887440" 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-25T23:48:28.887255" elapsed="0.000210"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:48:28.887821" 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-25T23:48:28.887648" elapsed="0.000198"/>
</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-25T23:48:28.888009" elapsed="0.000224"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.888628" 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-25T23:48:28.888384" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:48:28.888713" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.888867" 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-25T23:48:28.886849" elapsed="0.002042"/>
</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-25T23:48:28.895260" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.895465" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '140'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4092&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:48:28.895568" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:48:28.890951" elapsed="0.004643"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.888989" elapsed="0.006649"/>
</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-25T23:48:28.895810" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.895663" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.888942" elapsed="0.006954"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.899183" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4092&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.896906" elapsed="0.002325"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.896694" elapsed="0.002571"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.896676" elapsed="0.002614"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.902636" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:28.899558" elapsed="0.003142"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.899345" elapsed="0.003403"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.899328" elapsed="0.003454"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.903536" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.903016" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.904021" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.903670" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.904767" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.904354" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.904138" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.903644" elapsed="0.001237"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.905612" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.905113" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.906080" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.905746" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.906810" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.906405" elapsed="0.000440"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:28.906194" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.905720" elapsed="0.001203"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:28.907142" elapsed="0.000473"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:28.908298" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.907886" elapsed="0.000448"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.908541" elapsed="0.003194"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.896267" elapsed="0.015556"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:48:28.912134" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.911979" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.911897" elapsed="0.000354"/>
</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-25T23:48:28.912448" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.912536" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:48:28.914745" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4092&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.884005" elapsed="0.030783"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.914925" elapsed="0.000096"/>
</return>
<msg time="2026-04-25T23:48:28.915246" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4092&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:48:28.737927" elapsed="0.177399"/>
</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-25T23:48:28.916091" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.915519" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.915496" elapsed="0.000742"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:28.916285" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:28.916547" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;4092&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:48:28.732511" elapsed="0.184064"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:48:28.917165" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0af571a0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:48:28.916731" elapsed="0.000461"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.917730" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.917341" elapsed="0.000414"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.918314" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.917903" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:48:28.919023" elapsed="0.000599"/>
</kw>
<msg time="2026-04-25T23:48:28.919755" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.919798" level="INFO">${publish_count} = 4092</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.918494" elapsed="0.001327"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.920228" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.919911" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.919892" elapsed="0.000507"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.921179" level="INFO">${publish_count} = 4092</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.920578" elapsed="0.000628"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:48:28.922511" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.921878" elapsed="0.000815">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:48:28.922835" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:28.922880" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.921366" elapsed="0.001536"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.923277" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.922996" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.922976" elapsed="0.000472"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.928940" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:28.923590" elapsed="0.005390"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:48:28.929032" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:28.929256" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:48:28.929300" level="INFO">${publ_count} = 4092</msg>
<msg time="2026-04-25T23:48:28.929340" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:48:28.729351" elapsed="0.200010"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.929522" elapsed="0.000224"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:48:28.929897" elapsed="0.005955"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:48:28.728770" elapsed="0.207122"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-25T23:48:28.107881" elapsed="0.828041"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-25T23:48:28.936190" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:48:28.107207" elapsed="0.829112"/>
</kw>
<msg time="2026-04-25T23:48:28.936400" level="INFO">${result} = [True, True, True, True]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:48:28.106716" elapsed="0.829708"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:48:28.936471" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-25T23:48:28.105775" elapsed="0.830811"/>
</kw>
<msg time="2026-04-25T23:48:28.936675" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.936717" level="INFO">${message} = [True, True, True, True]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.105260" elapsed="0.831479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.936894" elapsed="0.031394"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:48:28.969312" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:48:28.969176" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.969153" elapsed="0.000254"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.969569" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [True, True, True, True].</doc>
<status status="PASS" start="2026-04-25T23:48:28.968736" elapsed="0.000915"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:28.969693" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:28.969845" level="INFO">${data} = [True, True, True, True]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:48:28.104851" elapsed="0.865021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.972243" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:48:28.972290" level="INFO">${args} = ['data_holder']</msg>
<msg time="2026-04-25T23:48:28.972333" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:28.971914" elapsed="0.000441"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-25T23:48:28.972512" elapsed="0.000216"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.974650" level="FAIL">False != True</msg>
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.974074" elapsed="0.000648">False != True</status>
</kw>
<var name="${active}">True</var>
<status status="FAIL" start="2026-04-25T23:48:28.973911" elapsed="0.000952">False != True</status>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="FAIL" start="2026-04-25T23:48:28.973776" elapsed="0.001151">False != True</status>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="FAIL" start="2026-04-25T23:48:28.973516" elapsed="0.001542">False != True</status>
</kw>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.972887" elapsed="0.002221">False != True</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.975164" elapsed="0.000032"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.971543" elapsed="0.003738">False != True</status>
</kw>
<msg time="2026-04-25T23:48:28.975384" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:28.975427" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.970950" elapsed="0.004500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.975607" elapsed="0.025182"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="NOT RUN" start="2026-04-25T23:48:29.001785" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:29.001649" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:29.001625" elapsed="0.000229"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T23:48:29.002403" level="FAIL">False != True</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-25T23:48:29.002045" elapsed="0.000428">False != True</status>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If FAIL is PASS do nothing. Otherwise Fail with False != True.</doc>
<status status="FAIL" start="2026-04-25T23:48:29.001237" elapsed="0.001347">False != True</status>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:29.002638" elapsed="0.000017"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="FAIL" start="2026-04-25T23:48:28.970525" elapsed="0.032211">False != True</status>
</kw>
<msg time="2026-04-25T23:48:29.002848" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:29.002912" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:28.970053" elapsed="0.032882"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:29.003149" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:29.003041" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:29.003022" elapsed="0.000190"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:48:29.004139" level="INFO">${date_now} = 2026-04-25 23:48:29.004</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:48:29.003947" elapsed="0.000218"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-25T23:48:29.004697" level="INFO">${time_deadline} = 1019.098</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-25T23:48:29.004309" elapsed="0.000414"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:29.005282" level="INFO">${time_minimal} = 600.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:29.004879" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:29.005613" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:29.005377" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:29.005359" elapsed="0.000331"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-25T23:48:29.003423" elapsed="0.002314"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.006522" level="INFO">Slept 10 minutes.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-25T23:48:29.005881" elapsed="600.000949"/>
</kw>
<var name="${i}">0.0</var>
<status status="PASS" start="2026-04-25T23:48:28.104645" elapsed="600.902304"/>
</iter>
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.011749" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:58:29.011817" level="INFO">${args} = ['1', 4]</msg>
<msg time="2026-04-25T23:58:29.011876" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.011293" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.013784" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:58:29.013434" elapsed="0.000388"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.017519" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.016426" elapsed="0.001207"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:29.017822" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T23:58:29.018381" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:29.015757" elapsed="0.002662"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.019391" 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-25T23:58:29.018648" elapsed="0.000782"/>
</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-25T23:58:29.058322" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.057897" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.059168" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.058869" elapsed="0.000386">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.059351" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.058537" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.059916" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.059536" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.060255" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.060425" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:29.060117" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.060847" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.060605" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.061837" 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-25T23:58:29.061586" elapsed="0.000296"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.062366" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.062051" elapsed="0.000341"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.063049" 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-25T23:58:29.062734" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:29.063789" 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-25T23:58:29.063568" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:29.063863" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:29.064031" 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-25T23:58:29.063257" elapsed="0.000799"/>
</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-25T23:58:29.064208" elapsed="0.000249"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:58:29.062604" elapsed="0.001893"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.062440" elapsed="0.002092"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.064575" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:29.064730" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:29.061272" elapsed="0.003483"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.060978" elapsed="0.003809"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.064971" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.064813" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.060941" elapsed="0.004110"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.065636" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.065190" elapsed="0.000473"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.065711" elapsed="0.000066"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.057294" elapsed="0.008583"/>
</kw>
<msg time="2026-04-25T23:58:29.065931" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.044995" elapsed="0.021004"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.078065" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.089816" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.101689" 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-25T23:58:29.101879" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.102060" 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-25T23:58:29.102452" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.102312" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.102298" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.102667" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.102828" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.103003" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.102268" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.102135" elapsed="0.000947"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.103221" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.103295" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:29.103433" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:29.040667" elapsed="0.062807"/>
</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-25T23:58:29.127617" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.127238" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.128371" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.128146" elapsed="0.000291">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.128529" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.127803" elapsed="0.000750"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.129108" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:29.128710" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.129424" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.129554" 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-25T23:58:29.129289" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.129987" 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-25T23:58:29.129731" elapsed="0.000310"/>
</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-25T23:58:29.130427" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.130117" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.130939" 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-25T23:58:29.130649" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.130510" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.130096" elapsed="0.000942"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.131742" 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-25T23:58:29.131179" elapsed="0.000592"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.131819" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.126580" elapsed="0.005366"/>
</kw>
<msg time="2026-04-25T23:58:29.132016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.114447" elapsed="0.017627"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.144148" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.156103" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.168057" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.168249" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.168418" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.168777" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.168637" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.168623" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.169005" 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-25T23:58:29.169167" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.169325" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.168594" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.168491" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.169539" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.169614" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.169757" 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-25T23:58:29.113441" elapsed="0.056360"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.171359" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.171104" elapsed="0.000319">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.171514" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.170744" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.171844" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.171607" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.172401" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.172112" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.171924" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.171589" elapsed="0.000893"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.174777" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.172626" elapsed="0.002177"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:29.174853" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.175052" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:29.170278" elapsed="0.004813"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.176854" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.176603" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.177343" 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-25T23:58:29.177101" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.177777" 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-25T23:58:29.177535" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.178262" 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-25T23:58:29.177980" elapsed="0.000326"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:29.179159" 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-25T23:58:29.178928" elapsed="0.000257"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:29.179508" 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-25T23:58:29.179337" elapsed="0.000196"/>
</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-25T23:58:29.179676" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.180291" 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-25T23:58:29.180045" elapsed="0.000291"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:29.180377" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.180532" 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-25T23:58:29.178518" elapsed="0.002039"/>
</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-25T23:58:29.191686" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:58:29.191889" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.192097" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:29.182815" elapsed="0.009320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.180627" elapsed="0.011570"/>
</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-25T23:58:29.192443" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.192235" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.180609" elapsed="0.011955"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.197221" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.194016" elapsed="0.003274"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.193689" elapsed="0.003648"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.193658" elapsed="0.003713"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.201002" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.197747" elapsed="0.003322"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.197448" elapsed="0.003668"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.197425" elapsed="0.003725"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.201898" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.201374" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.202393" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.202055" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.203159" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.202721" elapsed="0.000475"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.202506" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.202028" elapsed="0.001247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.204008" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.203486" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.204540" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.204193" elapsed="0.000432"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.205327" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.204888" elapsed="0.000476"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.204658" elapsed="0.000755"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.204166" elapsed="0.001278"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.205646" elapsed="0.000521"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:29.206778" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.206391" elapsed="0.000425"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.207050" elapsed="0.003312"/>
</kw>
<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="PASS" start="2026-04-25T23:58:29.193069" elapsed="0.017386"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:29.210712" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.210557" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.210530" elapsed="0.000312"/>
</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-25T23:58:29.211062" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.211158" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:58:29.213396" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.175526" elapsed="0.037915"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.213579" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:29.213881" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.026279" elapsed="0.187706"/>
</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-25T23:58:29.214753" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.214208" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.214188" elapsed="0.000714"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.214950" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:58:29.215239" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:29.019824" elapsed="0.195444"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:29.215871" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0cadf600&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:29.215428" elapsed="0.000471"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.216467" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.216068" elapsed="0.000426"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.217065" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.216645" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.217773" elapsed="0.000746"/>
</kw>
<msg time="2026-04-25T23:58:29.218710" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.218762" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.217248" elapsed="0.001542"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.219215" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.218876" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.218852" elapsed="0.000542"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.220152" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.219545" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.221541" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.220878" elapsed="0.000857">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:29.221885" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:29.221932" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.220346" elapsed="0.001610"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.222392" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.222054" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.222033" elapsed="0.000548"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.228341" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.222733" elapsed="0.005635"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:29.228420" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.228652" level="INFO">${active} = False</msg>
<msg time="2026-04-25T23:58:29.228697" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-25T23:58:29.228736" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:29.015051" elapsed="0.213708"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.228916" elapsed="0.000250"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.229321" elapsed="0.006019"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:58:29.014233" elapsed="0.221148"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.237565" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.236818" elapsed="0.000827"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:29.237777" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:29.238057" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:29.236369" elapsed="0.001714"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.238838" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:58:29.238287" elapsed="0.000580"/>
</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-25T23:58:29.276295" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.275904" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.277063" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.276806" elapsed="0.000323">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.277221" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.276483" elapsed="0.000761"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.277779" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.277403" elapsed="0.000449"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.278201" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.278347" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:29.278031" elapsed="0.000342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.278770" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.278524" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.279784" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.279519" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.280260" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.279998" elapsed="0.000288"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.280941" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:29.280636" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:29.281728" level="INFO">${encoded} = working-pair-2</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-25T23:58:29.281486" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:29.281803" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:29.281970" level="INFO">${encoded_value} = working-pair-2</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-25T23:58:29.281171" elapsed="0.000825"/>
</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-25T23:58:29.282169" elapsed="0.000246"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:58:29.280506" elapsed="0.001950"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.280337" elapsed="0.002158"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.282540" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.282710" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:29.279202" elapsed="0.003534"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.278884" elapsed="0.003884"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.282937" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.282792" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.278863" elapsed="0.004168"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.283609" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.283170" elapsed="0.000466"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.283684" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.275296" elapsed="0.008509"/>
</kw>
<msg time="2026-04-25T23:58:29.283857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.262637" elapsed="0.021272"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.296054" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.308050" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.320210" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.320403" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.320580" 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-25T23:58:29.320938" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.320799" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.320784" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.321171" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.321332" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.321490" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.320756" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.320654" elapsed="0.000914"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.321707" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.321782" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.321923" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:29.258234" elapsed="0.063751"/>
</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-25T23:58:29.346273" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.345805" elapsed="0.000498"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.347070" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.346815" elapsed="0.000323">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.347231" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.346475" elapsed="0.000780"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.347788" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:29.347410" elapsed="0.000405"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.348121" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.348255" 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-25T23:58:29.347984" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.348673" 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-25T23:58:29.348432" elapsed="0.000286"/>
</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-25T23:58:29.349129" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.348821" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.349656" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:58:29.349359" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.349220" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.348801" elapsed="0.000938"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.350508" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:29.349879" elapsed="0.000660"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.350593" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.345202" elapsed="0.005525"/>
</kw>
<msg time="2026-04-25T23:58:29.350783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.333143" elapsed="0.017693"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.366182" elapsed="0.000048"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.378219" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.390137" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.390331" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.390500" 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-25T23:58:29.390862" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.390723" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.390708" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.391094" 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-25T23:58:29.391255" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.391414" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.390679" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.390577" elapsed="0.000916"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.391631" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.391745" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:58:29.391898" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:29.332149" elapsed="0.059793"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.393501" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.393254" elapsed="0.000315">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.393662" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.392878" elapsed="0.000809"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.394017" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.393758" elapsed="0.000337"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.394594" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.394294" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.394121" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.393738" elapsed="0.000939"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.397099" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.394823" elapsed="0.002303"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:29.397178" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.397384" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:29.392418" elapsed="0.005011"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.399253" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.398995" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.399681" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:29.399446" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.400149" 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-25T23:58:29.399883" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.400577" 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-25T23:58:29.400339" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:29.401448" 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-25T23:58:29.401245" elapsed="0.000229"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:29.401833" 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-25T23:58:29.401648" elapsed="0.000211"/>
</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-25T23:58:29.402022" elapsed="0.000239"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.402661" 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-25T23:58:29.402414" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:29.402746" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.402925" 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-25T23:58:29.400815" elapsed="0.002137"/>
</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-25T23:58:29.410487" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.410666" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.410767" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:29.405247" elapsed="0.005547"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.403043" elapsed="0.007798"/>
</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-25T23:58:29.411050" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.410868" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.403024" elapsed="0.008120"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.414588" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.412182" elapsed="0.002461"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.411945" elapsed="0.002737"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.411926" elapsed="0.002782"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.417347" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.415027" elapsed="0.002372"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.414769" elapsed="0.002667"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.414750" elapsed="0.002714"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.418133" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.417649" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.418489" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.418243" elapsed="0.000328"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.419094" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.418767" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.418603" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.418223" elapsed="0.000956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.420118" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.419577" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.420585" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.420260" elapsed="0.000449"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.421503" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.421067" elapsed="0.000474"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.420755" elapsed="0.000836"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.420232" elapsed="0.001390"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.421841" elapsed="0.000630"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:29.423141" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.422699" elapsed="0.000479"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.423392" elapsed="0.003788"/>
</kw>
<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="PASS" start="2026-04-25T23:58:29.411505" elapsed="0.015773"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:29.427514" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.427378" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.427349" elapsed="0.000267"/>
</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-25T23:58:29.427815" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.427903" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:58:29.430369" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.397870" elapsed="0.032551"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.430657" elapsed="0.000082"/>
</return>
<msg time="2026-04-25T23:58:29.431034" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.244811" elapsed="0.186321"/>
</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-25T23:58:29.432060" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.431348" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.431325" elapsed="0.000902"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.432279" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:29.432560" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:29.239261" elapsed="0.193335"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:29.433451" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b992ca0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:29.432826" elapsed="0.000654"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.434083" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.433635" elapsed="0.000476"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.434703" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.434275" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.435525" elapsed="0.000679"/>
</kw>
<msg time="2026-04-25T23:58:29.436347" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.436394" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.434895" elapsed="0.001524"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.436828" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.436504" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.436481" elapsed="0.000552"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.437776" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.437186" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.439304" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.438586" elapsed="0.000927">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:29.439662" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:29.439707" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.437982" elapsed="0.001748"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.440211" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.439815" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.439791" elapsed="0.000616"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.446636" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.440563" elapsed="0.006113"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:29.446751" elapsed="0.000053"/>
</return>
<msg time="2026-04-25T23:58:29.447167" level="INFO">${active} = False</msg>
<msg time="2026-04-25T23:58:29.447215" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-25T23:58:29.447257" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:29.235854" elapsed="0.211425"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.447494" elapsed="0.000312"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.448106" elapsed="0.006434"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:58:29.235486" elapsed="0.219121"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.457322" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.456453" elapsed="0.000955"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:29.457550" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T23:58:29.457848" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:29.455855" elapsed="0.002019"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.458611" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:58:29.458078" elapsed="0.000562"/>
</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-25T23:58:29.498736" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.498310" elapsed="0.000460"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.499600" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.499288" elapsed="0.000398">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.499780" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.498938" elapsed="0.000866"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.500372" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.499979" elapsed="0.000420"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.500699" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.500875" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:29.500555" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.501325" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.501069" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.502381" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.502121" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.502850" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.502579" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.503548" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:29.503254" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:29.504300" level="INFO">${encoded} = working-pair-3</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-25T23:58:29.504077" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:29.504378" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:58:29.504539" level="INFO">${encoded_value} = working-pair-3</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-25T23:58:29.503752" elapsed="0.000812"/>
</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-25T23:58:29.504711" elapsed="0.000240"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:58:29.503123" elapsed="0.001969"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.502929" elapsed="0.002203"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.505176" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:29.505333" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:29.501776" elapsed="0.003582"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.501453" elapsed="0.003936"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.505559" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.505415" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.501424" elapsed="0.004212"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.506286" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.505775" elapsed="0.000545"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.506375" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.497581" elapsed="0.008921"/>
</kw>
<msg time="2026-04-25T23:58:29.506557" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.482948" elapsed="0.023660"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.518692" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.532492" elapsed="0.000043"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.545364" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.545567" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.545743" 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-25T23:58:29.546170" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.545996" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.545977" elapsed="0.000276"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.546390" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.546554" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.546715" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.545929" elapsed="0.000840"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.545823" elapsed="0.000973"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.547011" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.547091" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:29.547268" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:29.478688" elapsed="0.068623"/>
</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-25T23:58:29.571447" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.571058" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.572220" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.571974" elapsed="0.000321">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.572388" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.571633" elapsed="0.000779"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.572949" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:29.572570" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.573284" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.573434" 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-25T23:58:29.573148" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.573856" 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-25T23:58:29.573614" elapsed="0.000288"/>
</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-25T23:58:29.574320" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.573984" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.574832" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:58:29.574541" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.574402" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.573949" elapsed="0.000965"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.575613" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:29.575071" elapsed="0.000570"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.575689" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.570442" elapsed="0.005372"/>
</kw>
<msg time="2026-04-25T23:58:29.575867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.558169" elapsed="0.017749"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.587977" elapsed="0.000070"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.599894" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.611923" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.612134" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.612305" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.612662" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.612523" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.612509" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.612877" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.613056" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.613218" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.612480" elapsed="0.000791"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.612380" elapsed="0.000916"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.613435" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.613509" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.613654" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:29.557145" elapsed="0.056552"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.615238" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.614995" elapsed="0.000308">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.615395" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.614640" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.615727" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.615488" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.616337" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.616039" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.615840" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.615469" elapsed="0.000950"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.618678" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.616564" elapsed="0.002140"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:29.618755" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.618933" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:29.614189" elapsed="0.004803"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.620903" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.620650" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.621349" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:29.621113" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.621780" 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-25T23:58:29.621540" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.622241" 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-25T23:58:29.621984" elapsed="0.000301"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:29.623123" 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-25T23:58:29.622893" elapsed="0.000257"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:29.623571" 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-25T23:58:29.623333" elapsed="0.000273"/>
</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-25T23:58:29.623806" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.624662" 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-25T23:58:29.624321" elapsed="0.000404"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:29.624784" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:58:29.625023" 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-25T23:58:29.622481" elapsed="0.002578"/>
</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-25T23:58:29.633040" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.633190" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.633301" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:29.628281" elapsed="0.005046"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.625158" elapsed="0.008216"/>
</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-25T23:58:29.633551" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.633401" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.625133" elapsed="0.008507"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.637798" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.634739" elapsed="0.003130"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.634519" elapsed="0.003400"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.634500" elapsed="0.003454"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.641568" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.638382" elapsed="0.003249"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.638079" elapsed="0.003650"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.638054" elapsed="0.003713"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.642560" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.642029" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.643037" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.642697" elapsed="0.000425"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.643786" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.643370" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.643156" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.642670" elapsed="0.001233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.644642" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.644139" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.645114" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.644777" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.645875" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.645441" elapsed="0.000471"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.645228" elapsed="0.000754"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.644751" elapsed="0.001293"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.646251" elapsed="0.000479"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:29.647321" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.646953" elapsed="0.000394"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.647496" elapsed="0.002287"/>
</kw>
<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="PASS" start="2026-04-25T23:58:29.634038" elapsed="0.015811"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:29.650059" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.649922" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.649903" elapsed="0.000242"/>
</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-25T23:58:29.650289" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.650356" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.652599" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.619588" elapsed="0.033055"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.652783" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:29.653115" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.465167" elapsed="0.188029"/>
</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-25T23:58:29.653941" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.653398" elapsed="0.000673"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.653377" elapsed="0.000743"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.654169" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:29.654474" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:29.458934" elapsed="0.195569"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:29.655132" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b9b5080&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:29.654664" elapsed="0.000496"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.655730" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.655312" elapsed="0.000445"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.656343" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.655912" elapsed="0.000457"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.657077" elapsed="0.000626"/>
</kw>
<msg time="2026-04-25T23:58:29.657847" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.657896" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.656529" elapsed="0.001393"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.658369" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.658068" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.658047" elapsed="0.000501"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.659307" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.658699" elapsed="0.000637"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.660713" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.660065" elapsed="0.000844">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:29.661075" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:29.661122" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.659504" elapsed="0.001642"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.661528" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.661226" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.661207" elapsed="0.000498"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.667549" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.661853" elapsed="0.005724"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:29.667628" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:29.667858" level="INFO">${active} = False</msg>
<msg time="2026-04-25T23:58:29.667902" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-25T23:58:29.667943" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:29.455296" elapsed="0.212685"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.668140" elapsed="0.000235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.668529" elapsed="0.006300"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:58:29.454760" elapsed="0.220110"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.677186" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.676399" elapsed="0.000873"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:29.677421" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:29.677698" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:29.675907" elapsed="0.001818"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.678523" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:58:29.677887" elapsed="0.000666"/>
</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-25T23:58:29.716474" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.716070" elapsed="0.000435"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.717263" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.717015" elapsed="0.000318">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.717426" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.716669" elapsed="0.000782"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.718049" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.717610" elapsed="0.000469"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.718382" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.718534" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:29.718242" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.718971" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.718710" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.720007" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.719732" elapsed="0.000322"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.720475" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.720209" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.721161" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:29.720847" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:29.721897" level="INFO">${encoded} = working-pair-4</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-25T23:58:29.721680" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:29.722015" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:58:29.722176" level="INFO">${encoded_value} = working-pair-4</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-25T23:58:29.721368" elapsed="0.000833"/>
</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-25T23:58:29.722349" elapsed="0.000232"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:58:29.720719" elapsed="0.001902"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.720550" elapsed="0.002106"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:29.722699" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:29.722855" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:29.719402" elapsed="0.003479"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.719094" elapsed="0.003819"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.723101" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.722938" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.719072" elapsed="0.004106"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.723754" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.723316" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.723829" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.715420" elapsed="0.008531"/>
</kw>
<msg time="2026-04-25T23:58:29.724064" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.703116" elapsed="0.021003"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.736327" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.748122" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.759941" elapsed="0.000039"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.760149" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.760319" 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-25T23:58:29.760684" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.760545" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.760529" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.760898" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.761074" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.761234" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.760499" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.760396" elapsed="0.000917"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.761454" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.761530" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:29.761698" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:29.697508" elapsed="0.064233"/>
</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-25T23:58:29.786142" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.785726" elapsed="0.000445"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.786891" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:29.786652" elapsed="0.000335">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.787135" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.786328" elapsed="0.000831"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.787722" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:29.787335" elapsed="0.000415"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.788059" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:29.788204" 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-25T23:58:29.787905" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.788631" 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-25T23:58:29.788384" elapsed="0.000293"/>
</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-25T23:58:29.789048" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.788744" elapsed="0.000364"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.789568" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:58:29.789273" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.789133" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.788725" elapsed="0.000926"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.790388" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:29.789790" elapsed="0.000628"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.790469" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:29.785121" elapsed="0.005480"/>
</kw>
<msg time="2026-04-25T23:58:29.790659" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.772847" elapsed="0.017864"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.802852" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.814639" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.826417" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.826659" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.826838" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.827217" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.827076" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:29.827061" 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-25T23:58:29.827435" 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-25T23:58:29.827601" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.827763" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:29.827031" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.826913" elapsed="0.000930"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.828000" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.828079" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.828223" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:29.771851" elapsed="0.056417"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:29.829756" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.829519" elapsed="0.000302">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:29.829914" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:29.829181" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.830301" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.830045" elapsed="0.000318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.830870" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.830568" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.830387" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.830026" elapsed="0.000928"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.833240" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.831117" elapsed="0.002150"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:29.833317" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:29.833494" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:29.828707" elapsed="0.004827"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.835324" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.835074" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.835750" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:29.835515" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.836197" 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-25T23:58:29.835939" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.836620" 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-25T23:58:29.836384" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:29.837502" 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-25T23:58:29.837308" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:29.837848" 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-25T23:58:29.837678" elapsed="0.000195"/>
</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-25T23:58:29.838049" elapsed="0.000205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.838649" 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-25T23:58:29.838405" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:29.838735" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:29.838894" 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-25T23:58:29.836894" elapsed="0.002024"/>
</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-25T23:58:29.846627" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.846763" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.846861" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:29.841177" elapsed="0.005710"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.839015" elapsed="0.007918"/>
</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-25T23:58:29.847132" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.846979" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.838995" elapsed="0.008226"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.850682" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.848265" elapsed="0.002488"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.848042" elapsed="0.002765"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.848023" elapsed="0.002820"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.854425" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:29.851245" elapsed="0.003244"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.850920" elapsed="0.003615"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.850897" elapsed="0.003672"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.855325" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.854786" elapsed="0.000576"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.855775" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.855458" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.856537" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.856123" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.855887" elapsed="0.000734"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.855432" elapsed="0.001219"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.857412" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.856879" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.857872" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.857554" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.858672" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.858253" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:29.858021" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.857525" elapsed="0.001323"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.859078" elapsed="0.000485"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:29.860209" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.859794" elapsed="0.000452"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.860452" elapsed="0.002886"/>
</kw>
<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="PASS" start="2026-04-25T23:58:29.847564" elapsed="0.015837"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:29.863580" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.863473" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.863454" elapsed="0.000212"/>
</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-25T23:58:29.863808" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:29.863876" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:29.866127" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.834013" elapsed="0.032159"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.866317" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:29.866616" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.684374" elapsed="0.182324"/>
</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-25T23:58:29.867461" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.866889" elapsed="0.000672"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.866870" elapsed="0.000740"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:29.867658" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:29.867930" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:29.678836" elapsed="0.189136"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:29.868577" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aaf9800&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:29.868138" elapsed="0.000466"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.869169" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.868754" elapsed="0.000441"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.869741" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.869345" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:29.870511" elapsed="0.000631"/>
</kw>
<msg time="2026-04-25T23:58:29.871278" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.871323" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.869922" elapsed="0.001423"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.871710" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.871423" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.871403" elapsed="0.000519"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.872693" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.872124" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:29.874079" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.873421" elapsed="0.000851">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:29.874417" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:29.874464" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.872882" elapsed="0.001606"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.874853" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:29.874567" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.874547" elapsed="0.000504"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.880788" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:29.875201" elapsed="0.005615"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:29.880870" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.881137" level="INFO">${active} = False</msg>
<msg time="2026-04-25T23:58:29.881183" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-25T23:58:29.881229" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:29.675376" elapsed="0.205878"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.881415" elapsed="0.000235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.881821" elapsed="0.006112"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:58:29.674992" elapsed="0.213128"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-25T23:58:29.013894" elapsed="0.874260"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-25T23:58:29.888200" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:58:29.012875" elapsed="0.875453"/>
</kw>
<msg time="2026-04-25T23:58:29.888412" level="INFO">${result} = [False, False, False, False]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:58:29.012158" elapsed="0.876280"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:58:29.888488" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-25T23:58:29.010497" elapsed="0.878110"/>
</kw>
<msg time="2026-04-25T23:58:29.888700" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.888745" level="INFO">${message} = [False, False, False, False]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.009199" elapsed="0.879569"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.888925" elapsed="0.034740"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:58:29.924669" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.924535" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.924511" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.924922" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [False, False, False, False].</doc>
<status status="PASS" start="2026-04-25T23:58:29.924118" elapsed="0.000910"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:58:29.925074" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:29.925231" level="INFO">${data} = [False, False, False, False]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:58:29.008147" elapsed="0.917111"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.927601" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:58:29.927650" level="INFO">${args} = [[True, True, True, True]]</msg>
<msg time="2026-04-25T23:58:29.927695" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.927289" elapsed="0.000429"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-25T23:58:29.927873" elapsed="0.000232"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.929375" elapsed="0.000533"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-25T23:58:29.929241" elapsed="0.000779"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.930242" elapsed="0.000482"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-25T23:58:29.930111" elapsed="0.000655"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.930995" elapsed="0.000483"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-25T23:58:29.930848" elapsed="0.000670"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:29.931728" elapsed="0.000545"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-25T23:58:29.931600" elapsed="0.000714"/>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="PASS" start="2026-04-25T23:58:29.929102" elapsed="0.003241"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:58:29.928731" elapsed="0.003668"/>
</kw>
<msg time="2026-04-25T23:58:29.932482" level="INFO">${result} = None</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:58:29.928266" elapsed="0.004241"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:58:29.932556" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="PASS" start="2026-04-25T23:58:29.926892" elapsed="0.005787"/>
</kw>
<msg time="2026-04-25T23:58:29.932773" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.932824" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.926370" elapsed="0.006479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:29.933026" elapsed="0.027476"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:58:29.961509" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.961374" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.961351" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.961782" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with None.</doc>
<status status="PASS" start="2026-04-25T23:58:29.960932" elapsed="0.000938"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:58:29.961916" elapsed="0.000098"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:58:29.925892" elapsed="0.036228"/>
</kw>
<msg time="2026-04-25T23:58:29.962226" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:29.962273" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:29.925422" elapsed="0.036874"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:58:29.962487" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:58:29.962376" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:29.962358" elapsed="0.000211"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.962784" elapsed="0.000025"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.962979" elapsed="0.000023"/>
</kw>
<var name="${i}">1.0</var>
<status status="PASS" start="2026-04-25T23:58:29.007499" elapsed="0.955537"/>
</iter>
<var>${i}</var>
<value>${iterations}</value>
<status status="PASS" start="2026-04-25T23:48:28.104441" elapsed="601.858631"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:29.963215" elapsed="0.000021"/>
</kw>
<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="PASS" start="2026-04-25T23:48:28.099711" elapsed="601.863625"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.965432" level="INFO">${sum_local_number} = 0</msg>
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.963494" elapsed="0.001965"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.966016" level="INFO">${low_limit_pair_rate} = 4500.0</msg>
<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="PASS" start="2026-04-25T23:58:29.965615" elapsed="0.000430"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.966539" level="INFO">${high_limit_pair_rate} = 5500.0</msg>
<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="PASS" start="2026-04-25T23:58:29.966200" elapsed="0.000366"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.971417" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:29.971119" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:29.971564" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:29.971716" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:29.970760" elapsed="0.000982"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.972309" 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-25T23:58:29.971904" elapsed="0.000433"/>
</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-25T23:58:30.005291" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.004898" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.006212" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.005801" elapsed="0.000486">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.006381" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.005478" elapsed="0.000927"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.006947" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.006566" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.007289" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.007441" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:30.007150" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.007860" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.007618" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.009078" 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-25T23:58:30.008593" elapsed="0.000530"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.009690" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.009278" elapsed="0.000438"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.010780" 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-25T23:58:30.010118" elapsed="0.000704"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:30.012512" 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-25T23:58:30.012125" elapsed="0.000423"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:30.012627" elapsed="0.000079"/>
</return>
<msg time="2026-04-25T23:58:30.012986" 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-25T23:58:30.011302" elapsed="0.001726"/>
</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-25T23:58:30.013255" elapsed="0.000533"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:58:30.009941" elapsed="0.003948"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.009763" elapsed="0.004172"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.013995" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.014155" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:30.008280" elapsed="0.005900"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.007990" elapsed="0.006223"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.014383" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.014238" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.007952" elapsed="0.006507"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.015224" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.014596" elapsed="0.000656"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.015339" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.004296" elapsed="0.011169"/>
</kw>
<msg time="2026-04-25T23:58:30.015519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:29.992146" elapsed="0.023422"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.027619" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.039507" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.051280" 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-25T23:58:30.051470" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.051640" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.052011" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.051856" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.051842" elapsed="0.000249"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.052231" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.052393" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.052554" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.051813" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.051715" elapsed="0.000917"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.052771" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.052845" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:30.052953" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:29.987936" elapsed="0.065058"/>
</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-25T23:58:30.076574" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.076201" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.077400" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.077109" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.077558" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.076760" elapsed="0.000822"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.078177" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.077742" elapsed="0.000462"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.078494" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.078617" 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-25T23:58:30.078360" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.079113" 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-25T23:58:30.078836" elapsed="0.000325"/>
</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-25T23:58:30.079520" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.079228" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.080061" 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-25T23:58:30.079743" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.079603" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.079209" elapsed="0.000936"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.080815" 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-25T23:58:30.080290" elapsed="0.000554"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.080892" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.075535" elapsed="0.005500"/>
</kw>
<msg time="2026-04-25T23:58:30.081087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.063522" elapsed="0.017614"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.093169" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.105119" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.117143" elapsed="0.000033"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.117399" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.117570" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.117953" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.117797" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.117781" elapsed="0.000270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.118187" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.118352" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.118509" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.117752" elapsed="0.000810"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.117644" elapsed="0.000943"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.118726" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.118801" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:30.118929" 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-25T23:58:30.062674" elapsed="0.056297"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.120242" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.119997" elapsed="0.000312">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.120401" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.119638" elapsed="0.000787"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.120737" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.120494" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.121294" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.121003" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.120817" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.120476" elapsed="0.000900"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.123655" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:30.121521" elapsed="0.002160"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:30.123733" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:30.123886" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:30.119314" elapsed="0.004596"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.125423" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.125178" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.125847" 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-25T23:58:30.125614" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.126355" 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-25T23:58:30.126113" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.126780" 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-25T23:58:30.126544" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:30.127621" 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-25T23:58:30.127427" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:30.127982" 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-25T23:58:30.127796" elapsed="0.000213"/>
</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-25T23:58:30.128153" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.128749" 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-25T23:58:30.128506" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:30.128835" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.129002" 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-25T23:58:30.127033" elapsed="0.001995"/>
</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-25T23:58:30.137517" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:58:30.137783" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '190'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.137896" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:30.131288" elapsed="0.006654"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.129097" elapsed="0.008912"/>
</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-25T23:58:30.138187" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.138037" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.129080" elapsed="0.009201"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.141597" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.139306" elapsed="0.002343"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.139086" elapsed="0.002597"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.139067" elapsed="0.002641"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.145144" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.142021" elapsed="0.003192"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.141763" elapsed="0.003500"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.141747" elapsed="0.003551"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.146080" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.145516" elapsed="0.000602"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.146539" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.146216" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.147321" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.146877" elapsed="0.000481"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.146655" elapsed="0.000753"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.146190" elapsed="0.001249"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.148181" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.147654" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.148687" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.148315" elapsed="0.000454"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.149464" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.149047" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.148805" elapsed="0.000745"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.148290" elapsed="0.001291"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.149783" elapsed="0.000519"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:30.150741" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.150463" elapsed="0.000305"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.150918" elapsed="0.002296"/>
</kw>
<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="PASS" start="2026-04-25T23:58:30.138634" elapsed="0.014645"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:30.153460" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.153352" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.153333" elapsed="0.000213"/>
</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-25T23:58:30.153690" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.153758" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:30.156091" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.124248" elapsed="0.031876"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.156203" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:58:30.156371" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:29.977082" elapsed="0.179321"/>
</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-25T23:58:30.156761" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.156514" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.156495" elapsed="0.000363"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.156891" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:58:30.157061" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-25T23:58:29.972588" elapsed="0.184503"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:30.157582" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b993330&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:30.157249" elapsed="0.000361"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.158115" level="INFO">${all_not} = 6000004</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.157760" elapsed="0.000381"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.158571" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.158292" elapsed="0.000305"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.159037" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.158746" elapsed="0.000354"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.159550" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.159269" elapsed="0.000307"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-25T23:58:30.159625" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.159881" level="INFO">${all_not} = 6000004</msg>
<msg time="2026-04-25T23:58:30.159925" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-25T23:58:30.159981" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-25T23:58:30.160024" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:58:29.970298" elapsed="0.189748"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.162201" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.160209" elapsed="0.002053"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.164232" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.162414" elapsed="0.001874"/>
</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="PASS" start="2026-04-25T23:58:30.164439" elapsed="0.000313"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.165283" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:58:30.164906" elapsed="0.000403"/>
</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="PASS" start="2026-04-25T23:58:30.165458" elapsed="0.000326"/>
</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="PASS" start="2026-04-25T23:58:30.165968" elapsed="0.000334"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.166803" level="INFO">${sum_local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:58:30.166455" elapsed="0.000374"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:58:29.966831" elapsed="0.200034"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.171581" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.171289" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:30.171653" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.171799" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:30.170937" elapsed="0.000885"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.172373" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:58:30.171996" elapsed="0.000403"/>
</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-25T23:58:30.204826" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.204454" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.205679" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.205362" elapsed="0.000384">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.205839" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.205029" elapsed="0.000835"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.206453" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.206064" elapsed="0.000416"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.206767" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.206906" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:30.206633" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.207381" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.207137" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.208590" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.208112" elapsed="0.000524"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.209228" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.208791" elapsed="0.000463"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.210334" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:30.209627" elapsed="0.000747"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:30.212056" level="INFO">${encoded} = working-pair-2</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-25T23:58:30.211660" elapsed="0.000432"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:30.212169" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:30.212508" level="INFO">${encoded_value} = working-pair-2</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-25T23:58:30.210824" elapsed="0.001725"/>
</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-25T23:58:30.212770" elapsed="0.000540"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:58:30.209468" elapsed="0.003942"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.209303" elapsed="0.004144"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.213490" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:30.213644" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:30.207783" elapsed="0.005886"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.207496" elapsed="0.006204"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.213868" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.213725" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.207476" elapsed="0.006517"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.214571" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.214133" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.214645" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.203835" elapsed="0.010932"/>
</kw>
<msg time="2026-04-25T23:58:30.214820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.191556" elapsed="0.023312"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.227056" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.238877" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.250717" 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-25T23:58:30.250944" elapsed="0.000036"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.251131" 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-25T23:58:30.251485" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.251347" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.251332" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.251697" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.251861" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.252036" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.251305" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.251205" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.252257" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.252332" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:30.252442" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.187499" elapsed="0.064968"/>
</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-25T23:58:30.276009" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.275625" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.276800" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.276514" elapsed="0.000350">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.276974" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.276192" elapsed="0.000809"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.277543" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.277163" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.277855" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.278012" 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-25T23:58:30.277722" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.278429" 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-25T23:58:30.278188" elapsed="0.000287"/>
</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-25T23:58:30.278824" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.278540" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.279357" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:58:30.279062" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.278907" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.278521" elapsed="0.000918"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.280111" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:30.279577" elapsed="0.000596"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.280225" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.275028" elapsed="0.005323"/>
</kw>
<msg time="2026-04-25T23:58:30.280405" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.263013" elapsed="0.017440"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.292460" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.304819" elapsed="0.000068"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.323417" elapsed="0.000034"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.323633" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.323806" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.324196" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.324055" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.324039" 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-25T23:58:30.324411" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.324571" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.324728" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.324007" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.323883" elapsed="0.000923"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.324944" elapsed="0.000034"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.325037" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:30.325171" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:30.262169" elapsed="0.063029"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.326569" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.326311" elapsed="0.000327">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.326731" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.325935" elapsed="0.000824"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.327098" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.326834" elapsed="0.000321"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.327638" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.327347" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.327179" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.326815" elapsed="0.000904"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.330001" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:30.327864" elapsed="0.002164"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:30.330079" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:30.330233" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:30.325584" elapsed="0.004674"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.331763" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.331516" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.332208" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:30.331970" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.332633" 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-25T23:58:30.332396" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.333068" 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-25T23:58:30.332817" elapsed="0.000294"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:30.333916" 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-25T23:58:30.333701" elapsed="0.000241"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:30.334278" 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-25T23:58:30.334107" elapsed="0.000196"/>
</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-25T23:58:30.334444" elapsed="0.000201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.335053" 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-25T23:58:30.334793" elapsed="0.000303"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:30.335138" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.335289" 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-25T23:58:30.333309" elapsed="0.002005"/>
</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-25T23:58:30.343524" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.343787" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '190'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.344028" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:30.337573" elapsed="0.006514"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.335383" elapsed="0.008805"/>
</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-25T23:58:30.344572" elapsed="0.000114"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.344248" elapsed="0.000542"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.335365" elapsed="0.009472"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.351595" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.347149" elapsed="0.004522"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.346645" elapsed="0.005078"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.346605" elapsed="0.005155"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.355591" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.352184" elapsed="0.003474"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.351842" elapsed="0.003865"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.351817" elapsed="0.003926"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.356555" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.355994" elapsed="0.000601"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.357057" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.356695" elapsed="0.000446"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.357838" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.357403" elapsed="0.000488"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.357177" elapsed="0.000766"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.356669" elapsed="0.001325"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.358750" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.358225" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.359240" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.358887" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.360041" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.359587" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.359358" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.358862" elapsed="0.001300"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.360376" elapsed="0.000502"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:30.361559" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.361136" elapsed="0.000460"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.361814" elapsed="0.002469"/>
</kw>
<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="PASS" start="2026-04-25T23:58:30.345626" elapsed="0.018724"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:30.364534" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.364425" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.364406" elapsed="0.000219"/>
</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-25T23:58:30.364770" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.364838" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:30.367079" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.330578" elapsed="0.036531"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.367180" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.367334" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.176850" elapsed="0.190557"/>
</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-25T23:58:30.367765" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.367517" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.367499" elapsed="0.000361"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.367893" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:30.368064" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-25T23:58:30.172644" elapsed="0.195449"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:30.368604" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aaf8400&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:30.368260" elapsed="0.000370"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.369090" level="INFO">${all_not} = 6000004</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.368782" elapsed="0.000334"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.369545" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.369267" elapsed="0.000303"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.370031" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.369720" elapsed="0.000337"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.370486" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.370212" elapsed="0.000299"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-25T23:58:30.370556" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.370815" level="INFO">${all_not} = 6000004</msg>
<msg time="2026-04-25T23:58:30.370858" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-25T23:58:30.370898" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-25T23:58:30.370937" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:58:30.170480" elapsed="0.200493"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.373140" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.371140" elapsed="0.002058"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.375211" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.373355" elapsed="0.001913"/>
</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="PASS" start="2026-04-25T23:58:30.375419" elapsed="0.000314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.376266" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:58:30.375886" elapsed="0.000406"/>
</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="PASS" start="2026-04-25T23:58:30.376442" elapsed="0.000324"/>
</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="PASS" start="2026-04-25T23:58:30.376915" elapsed="0.000339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.377754" level="INFO">${sum_local_number} = 3000002</msg>
<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="PASS" start="2026-04-25T23:58:30.377405" elapsed="0.000375"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:58:30.167008" elapsed="0.210808"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.382645" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.382348" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:30.382718" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.382878" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:30.382002" elapsed="0.000937"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.383511" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:58:30.383125" elapsed="0.000413"/>
</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-25T23:58:30.416042" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.415650" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.416897" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.416553" elapsed="0.000443">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.417091" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.416228" elapsed="0.000888"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.417658" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.417275" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.418030" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.418186" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:30.417840" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.418756" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.418512" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.420026" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.419527" elapsed="0.000546"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.420650" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.420228" elapsed="0.000448"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.421749" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:30.421081" elapsed="0.000709"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:30.423512" level="INFO">${encoded} = working-pair-3</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-25T23:58:30.423127" elapsed="0.000423"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:30.423632" elapsed="0.000086"/>
</return>
<msg time="2026-04-25T23:58:30.424007" level="INFO">${encoded_value} = working-pair-3</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-25T23:58:30.422299" elapsed="0.001749"/>
</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-25T23:58:30.424278" elapsed="0.000537"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:58:30.420899" elapsed="0.004016"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.420730" elapsed="0.004238"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.425016" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.425174" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:30.419206" elapsed="0.005993"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.418875" elapsed="0.006356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.425412" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.425259" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.418852" elapsed="0.006636"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.426136" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.425629" elapsed="0.000534"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.426210" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.415031" elapsed="0.011304"/>
</kw>
<msg time="2026-04-25T23:58:30.426461" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.402709" elapsed="0.023811"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.441176" elapsed="0.000080"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.453294" elapsed="0.000076"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.465459" elapsed="0.000064"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.465771" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.465983" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.466419" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.466270" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.466253" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.466638" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.466801" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.466979" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.466211" elapsed="0.000823"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.466071" elapsed="0.000991"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.467205" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.467285" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:30.467429" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.398610" elapsed="0.068847"/>
</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-25T23:58:30.491712" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.491323" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.492655" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.492313" elapsed="0.000417">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.492823" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.491976" elapsed="0.000871"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.493417" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.493025" elapsed="0.000420"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.493744" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.493919" 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-25T23:58:30.493602" elapsed="0.000346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.494373" 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-25T23:58:30.494121" elapsed="0.000300"/>
</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-25T23:58:30.494782" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.494488" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.495326" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:58:30.495027" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.494869" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.494469" elapsed="0.000941"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.496113" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:30.495551" elapsed="0.000592"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.496192" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.490705" elapsed="0.005614"/>
</kw>
<msg time="2026-04-25T23:58:30.496373" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.478583" elapsed="0.017839"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.508463" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.520369" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.532443" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.532694" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.532882" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.533271" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.533129" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.533114" 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-25T23:58:30.533485" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.533647" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.533805" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.533085" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.532977" elapsed="0.000924"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.534057" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.534134" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:30.534259" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:30.477666" elapsed="0.056621"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.535540" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.535296" elapsed="0.000314">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.535701" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.534940" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.536051" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.535794" elapsed="0.000313"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.536587" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.536300" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.536131" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.535775" elapsed="0.000894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.538929" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:30.536812" elapsed="0.002155"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:30.539020" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.539174" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:30.534615" elapsed="0.004584"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.540707" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.540458" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.541158" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:30.540904" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.541601" 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-25T23:58:30.541357" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.542084" 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-25T23:58:30.541791" elapsed="0.000339"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:30.542983" 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-25T23:58:30.542770" elapsed="0.000241"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:30.543333" 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-25T23:58:30.543160" elapsed="0.000199"/>
</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-25T23:58:30.543504" elapsed="0.000205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.544124" 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-25T23:58:30.543860" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:30.544210" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.544366" 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-25T23:58:30.542371" elapsed="0.002021"/>
</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-25T23:58:30.552986" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.553179" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '190'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.553338" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:30.546664" elapsed="0.006712"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.544463" elapsed="0.008979"/>
</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-25T23:58:30.553698" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.553480" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.544445" elapsed="0.009383"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.558802" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.555363" elapsed="0.003512"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.555045" elapsed="0.003882"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.555018" elapsed="0.003967"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.562842" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.559387" elapsed="0.003519"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.559067" elapsed="0.003886"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.559044" elapsed="0.003966"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.563756" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.563231" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.564233" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.563891" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.565000" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.564566" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.564352" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.563866" elapsed="0.001252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.565859" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.565336" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.566329" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.566014" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.567082" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.566654" elapsed="0.000465"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.566443" elapsed="0.000773"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.565987" elapsed="0.001263"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.567453" elapsed="0.000477"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:30.568570" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.568176" elapsed="0.000430"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.568815" elapsed="0.003241"/>
</kw>
<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="PASS" start="2026-04-25T23:58:30.554384" elapsed="0.017761"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:30.572394" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.572244" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.572219" elapsed="0.000293"/>
</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-25T23:58:30.572709" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.572804" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:58:30.575450" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.539518" elapsed="0.035963"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.575551" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.575704" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.388022" elapsed="0.187711"/>
</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-25T23:58:30.576086" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.575837" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.575819" elapsed="0.000360"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.576212" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.576365" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-25T23:58:30.383787" elapsed="0.192606"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:30.576883" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aabf9c0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:30.576550" elapsed="0.000360"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.577370" level="INFO">${all_not} = 6000004</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.577076" elapsed="0.000320"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.577820" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.577546" elapsed="0.000319"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.578307" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.578030" elapsed="0.000302"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.578758" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.578482" elapsed="0.000301"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-25T23:58:30.578829" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:30.579139" level="INFO">${all_not} = 6000004</msg>
<msg time="2026-04-25T23:58:30.579184" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-25T23:58:30.579224" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-25T23:58:30.579264" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:58:30.381462" elapsed="0.197825"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.581439" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.579449" elapsed="0.002047"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.583543" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.581650" elapsed="0.001953"/>
</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="PASS" start="2026-04-25T23:58:30.583756" elapsed="0.000332"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.584598" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:58:30.584242" elapsed="0.000383"/>
</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="PASS" start="2026-04-25T23:58:30.584773" elapsed="0.000340"/>
</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="PASS" start="2026-04-25T23:58:30.585267" elapsed="0.000321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.586234" level="INFO">${sum_local_number} = 4500003</msg>
<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="PASS" start="2026-04-25T23:58:30.585737" elapsed="0.000523"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:58:30.377982" elapsed="0.208316"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.591054" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.590741" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:30.591126" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.591274" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:30.590400" elapsed="0.000898"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.591831" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:58:30.591455" elapsed="0.000403"/>
</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-25T23:58:30.630355" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.629580" elapsed="0.000804"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.631208" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.630872" elapsed="0.000410">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.631376" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.630543" elapsed="0.000858"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.631954" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.631565" elapsed="0.000434"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.632297" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.632439" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:30.632156" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.632862" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.632617" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.634102" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.633600" elapsed="0.000549"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.634761" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.634303" elapsed="0.000485"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.635857" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:30.635193" elapsed="0.000706"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:30.637564" level="INFO">${encoded} = working-pair-4</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-25T23:58:30.637189" elapsed="0.000411"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:30.637679" elapsed="0.000077"/>
</return>
<msg time="2026-04-25T23:58:30.638067" level="INFO">${encoded_value} = working-pair-4</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-25T23:58:30.636368" elapsed="0.001740"/>
</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-25T23:58:30.638329" elapsed="0.000513"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:58:30.635027" elapsed="0.003915"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.634838" elapsed="0.004157"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.639040" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.639198" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:30.633284" elapsed="0.005939"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.632991" elapsed="0.006265"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.639427" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.639281" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.632955" elapsed="0.006549"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.640107" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.639643" elapsed="0.000491"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.640184" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.628168" elapsed="0.012140"/>
</kw>
<msg time="2026-04-25T23:58:30.640361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.611228" elapsed="0.029183"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.652645" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.664559" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.676412" 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-25T23:58:30.676603" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.676772" 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-25T23:58:30.677185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.677043" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.677027" 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-25T23:58:30.677401" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.677566" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.677728" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.676998" elapsed="0.000785"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.676880" elapsed="0.000951"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.677990" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.678068" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:30.678178" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-25T23:58:30.607084" elapsed="0.071119"/>
</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-25T23:58:30.702000" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.701597" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.702805" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-25T23:58:30.702517" elapsed="0.000353">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.702983" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.702187" elapsed="0.000822"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.703559" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.703175" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.703875" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.704021" 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-25T23:58:30.703741" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.704441" 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-25T23:58:30.704199" elapsed="0.000289"/>
</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-25T23:58:30.704839" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.704554" elapsed="0.000344"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.705385" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:58:30.705079" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.704923" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.704535" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.706167" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:30.705607" elapsed="0.000589"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.706246" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.700991" elapsed="0.005379"/>
</kw>
<msg time="2026-04-25T23:58:30.706460" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.688779" elapsed="0.017731"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.718577" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.730703" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.742529" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.742741" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.742914" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.743314" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.743171" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:30.743154" elapsed="0.000242"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.743530" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.743690" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.743848" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:30.743120" elapsed="0.000781"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.743007" elapsed="0.000920"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.744081" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.744158" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:30.744296" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:30.687925" elapsed="0.056400"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.745639" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-25T23:58:30.745378" elapsed="0.000381">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.745870" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.745018" elapsed="0.000877"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.746233" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.745981" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.746786" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.746482" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.746315" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.745947" elapsed="0.000922"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.749151" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:30.747031" elapsed="0.002146"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:30.749230" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:30.749385" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:30.744668" elapsed="0.004742"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.750945" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.750693" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.751394" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:30.751155" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.751828" 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-25T23:58:30.751585" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.752273" 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-25T23:58:30.752032" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:30.753122" 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-25T23:58:30.752910" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:30.753472" 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-25T23:58:30.753299" elapsed="0.000199"/>
</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-25T23:58:30.753642" elapsed="0.000230"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.754292" 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-25T23:58:30.754044" elapsed="0.000293"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:30.754379" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.754532" 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-25T23:58:30.752513" elapsed="0.002044"/>
</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-25T23:58:30.762277" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.762412" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '190'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.762509" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:30.756816" elapsed="0.005719"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.754627" elapsed="0.007953"/>
</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-25T23:58:30.762756" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.762607" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.754610" elapsed="0.008233"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.766211" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.763897" elapsed="0.002364"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.763684" elapsed="0.002612"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.763666" elapsed="0.002655"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.768841" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.766588" elapsed="0.002299"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.766375" elapsed="0.002546"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.766359" elapsed="0.002586"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.769493" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.769117" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.769852" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.769589" elapsed="0.000322"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.770477" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.770104" elapsed="0.000408"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.769935" elapsed="0.000625"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.769571" elapsed="0.001018"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.771319" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.770800" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.771763" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.771450" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.772521" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.772111" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.771876" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.771425" elapsed="0.001210"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.772832" elapsed="0.000505"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:30.773980" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:30.773555" elapsed="0.000464"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.774227" elapsed="0.003218"/>
</kw>
<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="PASS" start="2026-04-25T23:58:30.763250" elapsed="0.014285"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:30.777792" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.777640" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.777612" elapsed="0.000383"/>
</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-25T23:58:30.778198" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.778276" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:30.780488" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.749728" elapsed="0.030790"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.780587" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.780739" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:30.596340" elapsed="0.184427"/>
</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-25T23:58:30.781178" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.780908" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.780889" elapsed="0.000388"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.781310" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:30.781462" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;6000004&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-25T23:58:30.592120" elapsed="0.189372"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:30.782028" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0af54220&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:30.781649" elapsed="0.000406"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.782495" level="INFO">${all_not} = 6000004</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.782206" elapsed="0.000315"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.782949" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.782672" elapsed="0.000318"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.783417" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.783140" elapsed="0.000302"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:30.783866" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:30.783591" elapsed="0.000300"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-25T23:58:30.783938" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T23:58:30.784212" level="INFO">${all_not} = 6000004</msg>
<msg time="2026-04-25T23:58:30.784256" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-25T23:58:30.784296" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-25T23:58:30.784335" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-25T23:58:30.589920" elapsed="0.194437"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.786515" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.784517" elapsed="0.002056"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.788559" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:58:30.786726" elapsed="0.001891"/>
</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="PASS" start="2026-04-25T23:58:30.788768" elapsed="0.000336"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.789628" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-25T23:58:30.789259" elapsed="0.000395"/>
</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="PASS" start="2026-04-25T23:58:30.789833" elapsed="0.000351"/>
</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="PASS" start="2026-04-25T23:58:30.790334" elapsed="0.000325"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.791181" level="INFO">${sum_local_number} = 6000004</msg>
<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="PASS" start="2026-04-25T23:58:30.790812" elapsed="0.000395"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:58:30.586431" elapsed="0.204816"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-25T23:58:29.966620" elapsed="0.824660"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.791786" level="INFO">${final_rate} = 20000.013333333332</msg>
<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="PASS" start="2026-04-25T23:58:30.791430" elapsed="0.000383"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.792304" level="INFO">${low_limit_final_rate} = 18000.0</msg>
<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="PASS" start="2026-04-25T23:58:30.791976" elapsed="0.000355"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.792811" level="INFO">${high_limit_final_rate} = 22000.0</msg>
<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="PASS" start="2026-04-25T23:58:30.792480" elapsed="0.000357"/>
</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="PASS" start="2026-04-25T23:58:30.793035" elapsed="0.000333"/>
</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="PASS" start="2026-04-25T23:58:30.793516" elapsed="0.000339"/>
</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="PASS" start="2026-04-25T23:48:26.557466" elapsed="604.236451"/>
</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-25T23:58:30.795146" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.794765" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.794747" elapsed="0.000486"/>
</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-25T23:58:30.795372" elapsed="0.000307"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.800402" 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-25T23:58:30.800005" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-25T23:58:30.800644" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.800502" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.800483" elapsed="0.000239"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.800862" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-25T23:58:30.801043" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.801212" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:58:30.801371" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-25T23:58:30.801530" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.801689" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.801874" elapsed="0.000021"/>
</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-25T23:58:30.799700" elapsed="0.002251"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.794558" elapsed="0.007461"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-25T23:58:30.794205" elapsed="0.007856"/>
</kw>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:48:26.458940" elapsed="604.343159"/>
</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-25T23:58:30.805486" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:58:30.805231" elapsed="0.000515"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.806732" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:30.806624" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.806605" elapsed="0.000194"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.811538" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:30.811424" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.811406" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.812590" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:30.812213" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.813073" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:58:30.812767" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:58:30.813176" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:30.813335" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.811830" elapsed="0.001530"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.818595" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:30.818488" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.818470" elapsed="0.000192"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.819799" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:30.819693" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.819676" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:30.820334" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.820027" elapsed="0.000334"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:58:30.820729" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:58:30.820514" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:58:30.857253" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Ca "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:58:30.821252" elapsed="0.036120"/>
</kw>
<msg time="2026-04-25T23:58:30.857536" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:58:30.857583" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:30.820908" elapsed="0.036713"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:58:30.886047" level="INFO">"s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "6 "0 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:58:30.858181" elapsed="0.028103"/>
</kw>
<msg time="2026-04-25T23:58:30.886642" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:58:30.886744" level="INFO">${message_wait} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:30.857787" elapsed="0.029040"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.887527" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.887042" elapsed="0.000607"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.886993" elapsed="0.000709"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.888704" level="INFO"> "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "o "n "s "_ "r "a "t "e "_ "6 "0 "k "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:30.888036" elapsed="0.000819"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.889502" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.889036" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.888993" elapsed="0.000681"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:58:30.889748" elapsed="0.000089"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.892915" elapsed="0.001525"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.894715" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:58:30.895460" elapsed="0.000361"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:58:30.891546" elapsed="0.004377"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:58:30.890375" elapsed="0.005631"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:58:30.819398" elapsed="0.076707"/>
</kw>
<msg time="2026-04-25T23:58:30.896193" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:30.896275" level="INFO">${message} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:30.818804" elapsed="0.077510"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:58:30.896497" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:58:30.896391" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.896372" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.896982" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.897310" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:58:30.897381" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:58:30.818158" elapsed="0.079327"/>
</kw>
<msg time="2026-04-25T23:58:30.897576" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:30.897619" level="INFO">${output} =  "s "- "p "e "r "f ". "t "x "t ". "N "o "l "o "s "s "[C "R "a "t "e "[C "1 "N "o "d "e ". "N "o "t "i "f "i "c "a "t "i "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:30.813716" elapsed="0.083939"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.897999" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.897728" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.897711" elapsed="0.000367"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:58:30.813581" elapsed="0.084520"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:58:30.813412" elapsed="0.084718"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:58:30.811072" elapsed="0.087110"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:58:30.806345" elapsed="0.091899"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:30.805906" elapsed="0.092385"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:58:30.802974" elapsed="0.095367"/>
</kw>
<kw name="Dom_Notification_Broker_Test_Templ" owner="DnbCommons">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.905220" 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-25T23:58:30.904872" elapsed="0.000393"/>
</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-25T23:58:30.906402" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.906609" 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-25T23:58:30.906157" elapsed="0.000477"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.907187" 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-25T23:58:30.906789" elapsed="0.000441"/>
</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-25T23:58:30.907635" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.907839" 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-25T23:58:30.907408" elapsed="0.000456"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.908417" 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-25T23:58:30.908036" elapsed="0.000423"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.905764" elapsed="0.002751"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-25T23:58:30.905452" elapsed="0.003108"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.910685" 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-25T23:58:30.908698" elapsed="0.002014"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.911480" 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-25T23:58:30.911159" 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-25T23:58:30.915919" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.915622" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:30.916008" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:30.916157" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:30.915242" elapsed="0.000940"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.916714" 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-25T23:58:30.916337" elapsed="0.000405"/>
</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-25T23:58:30.949393" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:30.949005" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.950300" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.949941" elapsed="0.000465">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:30.950537" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:30.949583" elapsed="0.000988"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.951362" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:30.950794" elapsed="0.000606"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:30.951807" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:30.952031" 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-25T23:58:30.951618" elapsed="0.000450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.952622" 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-25T23:58:30.952280" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.955543" 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-25T23:58:30.955062" elapsed="0.000528"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.956199" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:30.955749" elapsed="0.000478"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.957293" 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-25T23:58:30.956611" elapsed="0.000724"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:30.959018" 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-25T23:58:30.958617" elapsed="0.000439"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:30.959138" elapsed="0.000078"/>
</return>
<msg time="2026-04-25T23:58:30.959484" 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-25T23:58:30.957799" elapsed="0.001725"/>
</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-25T23:58:30.959747" elapsed="0.000556"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:58:30.956450" elapsed="0.003951"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.956282" elapsed="0.004157"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:30.960483" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:30.960641" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:30.953217" elapsed="0.007451"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:30.952784" elapsed="0.007916"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.960873" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:30.960726" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:30.952755" elapsed="0.008197"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.961580" 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-25T23:58:30.961128" elapsed="0.000526"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:30.961705" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:30.948359" elapsed="0.013497"/>
</kw>
<msg time="2026-04-25T23:58:30.961910" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:30.936114" elapsed="0.025866"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.974000" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:30.985870" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.003099" 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-25T23:58:31.003292" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.003462" 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-25T23:58:31.003817" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.003679" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.003664" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.004044" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.004207" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.004372" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.003636" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.003536" elapsed="0.000914"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.004588" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.004662" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.004772" 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-25T23:58:30.931838" elapsed="0.072960"/>
</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-25T23:58:31.028784" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.028409" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.029602" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.029311" elapsed="0.000358">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.029762" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.028983" elapsed="0.000832"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.030386" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.029996" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.030703" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.030834" 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-25T23:58:31.030569" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.031274" 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-25T23:58:31.031029" elapsed="0.000292"/>
</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-25T23:58:31.031679" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.031388" elapsed="0.000349"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.032214" 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-25T23:58:31.031901" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.031762" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.031369" elapsed="0.000928"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.032982" 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-25T23:58:31.032438" elapsed="0.000574"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.033061" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.027790" elapsed="0.005397"/>
</kw>
<msg time="2026-04-25T23:58:31.033239" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.015497" elapsed="0.017791"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.045093" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.056858" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.068695" 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-25T23:58:31.068884" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.069068" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.069428" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.069287" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.069272" 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-25T23:58:31.069646" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.069825" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.070001" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.069243" elapsed="0.000813"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.069143" elapsed="0.000938"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.070222" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.070296" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.070413" 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-25T23:58:31.014603" elapsed="0.055838"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.071677" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.071443" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.071833" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.071110" elapsed="0.000748"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.072185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.071928" elapsed="0.000313"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.072734" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.072435" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.072266" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.071910" elapsed="0.000908"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.075310" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:31.072978" elapsed="0.002360"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:31.075390" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.075545" 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-chromium/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-25T23:58:31.070766" elapsed="0.004804"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.077094" 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-25T23:58:31.076829" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.077535" 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-25T23:58:31.077296" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.078067" 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-25T23:58:31.077769" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.078508" 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-25T23:58:31.078263" elapsed="0.000289"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:31.079351" 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-25T23:58:31.079158" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:31.079700" 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-25T23:58:31.079527" elapsed="0.000199"/>
</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-25T23:58:31.079871" elapsed="0.000215"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.080483" 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-25T23:58:31.080236" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:31.080571" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.080726" 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-25T23:58:31.078746" elapsed="0.002005"/>
</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-25T23:58:31.087551" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:58:31.087601" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.087700" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:31.082859" elapsed="0.004867"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.080822" elapsed="0.006950"/>
</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-25T23:58:31.087946" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.087798" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.080804" elapsed="0.007254"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.091358" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.089096" elapsed="0.002307"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.088848" elapsed="0.002589"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.088830" elapsed="0.002633"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.094270" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.091732" elapsed="0.002585"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.091519" elapsed="0.002832"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.091502" elapsed="0.002874"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.094913" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.094536" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.095266" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.095029" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.095805" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.095504" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.095348" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.095011" elapsed="0.000877"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.096419" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.096057" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.096740" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.096514" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.097296" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.096988" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.096821" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.096496" elapsed="0.000925"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.097568" elapsed="0.000382"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:31.098407" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.098128" elapsed="0.000305"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.098581" elapsed="0.002279"/>
</kw>
<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="PASS" start="2026-04-25T23:58:31.088413" elapsed="0.012512"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:31.101120" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:31.101013" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.100993" elapsed="0.000212"/>
</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-25T23:58:31.101348" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.101417" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.103590" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.075882" elapsed="0.027734"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.103686" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.103839" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:30.921200" elapsed="0.182664"/>
</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-25T23:58:31.104224" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.103985" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.103949" elapsed="0.000369"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.104351" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:58:30.917002" elapsed="0.187473"/>
</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="PASS" start="2026-04-25T23:58:30.914777" elapsed="0.189760"/>
</kw>
<var name="${suffix}">5000</var>
<status status="PASS" start="2026-04-25T23:58:30.911028" elapsed="0.193544"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.105141" level="INFO">${count} = 2</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-25T23:58:31.104795" elapsed="0.000373"/>
</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-25T23:58:31.109588" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.109289" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:31.109661" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.109833" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:31.108930" elapsed="0.000929"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.110410" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:58:31.110034" elapsed="0.000403"/>
</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-25T23:58:31.142662" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.142290" elapsed="0.000456"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.143555" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.143254" elapsed="0.000367">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.143715" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.142909" elapsed="0.000830"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.144314" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.143897" elapsed="0.000444"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.144628" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.144760" 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-25T23:58:31.144495" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.145193" 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-25T23:58:31.144934" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.146400" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.145921" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.147027" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.146600" elapsed="0.000454"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.148095" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:31.147424" elapsed="0.000718"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:31.149791" level="INFO">${encoded} = working-pair-2</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-25T23:58:31.149396" elapsed="0.000442"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:31.149915" elapsed="0.000090"/>
</return>
<msg time="2026-04-25T23:58:31.150263" level="INFO">${encoded_value} = working-pair-2</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-25T23:58:31.148586" elapsed="0.001717"/>
</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-25T23:58:31.150520" elapsed="0.000527"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:58:31.147265" elapsed="0.003881"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.147102" elapsed="0.004081"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.151226" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:31.151380" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:31.145589" elapsed="0.005816"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.145304" elapsed="0.006132"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.151606" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.151460" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.145284" elapsed="0.006399"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.152268" 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-25T23:58:31.151819" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.152343" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.141654" elapsed="0.010809"/>
</kw>
<msg time="2026-04-25T23:58:31.152514" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.129737" elapsed="0.022825"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.164825" elapsed="0.000034"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.176600" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.188318" 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-25T23:58:31.188511" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.188682" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.189058" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.188903" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.188886" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.189272" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.189432" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.189589" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.188857" elapsed="0.000784"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.188756" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.189820" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.189896" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.190027" 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-25T23:58:31.125668" elapsed="0.064385"/>
</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-25T23:58:31.213557" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.213177" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.214421" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.214111" elapsed="0.000377">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.214582" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.213741" elapsed="0.000866"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.215212" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.214763" elapsed="0.000477"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.215536" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.215672" 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-25T23:58:31.215398" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.216114" 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-25T23:58:31.215849" elapsed="0.000313"/>
</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-25T23:58:31.216520" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.216229" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.217115" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:58:31.216742" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.216604" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.216210" elapsed="0.000990"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.217897" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:31.217341" elapsed="0.000585"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.217991" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.212559" elapsed="0.005559"/>
</kw>
<msg time="2026-04-25T23:58:31.218171" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.200628" elapsed="0.017591"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.230340" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.242168" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.253802" 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-25T23:58:31.254003" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.254172" 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-25T23:58:31.254519" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.254384" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.254370" elapsed="0.000261"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.254769" 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-25T23:58:31.254930" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.255105" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.254343" elapsed="0.000815"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.254244" elapsed="0.000938"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.255319" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.255392" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.255507" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:31.199765" elapsed="0.055768"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.256741" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.256510" elapsed="0.000300">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.256900" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.256185" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.257259" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.257015" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.257823" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.257506" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.257338" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.256995" elapsed="0.000909"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.260317" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:31.258073" elapsed="0.002270"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:31.260394" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.260545" 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-chromium/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-25T23:58:31.255855" elapsed="0.004714"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.262090" 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-25T23:58:31.261829" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.262521" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:31.262285" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.262946" 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-25T23:58:31.262708" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.263383" 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-25T23:58:31.263148" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:31.264217" 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-25T23:58:31.264025" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:31.264558" 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-25T23:58:31.264389" elapsed="0.000194"/>
</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-25T23:58:31.264723" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.265369" 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-25T23:58:31.265126" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:31.265455" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.265607" 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-25T23:58:31.263621" elapsed="0.002010"/>
</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-25T23:58:31.272479" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:31.272528" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.272616" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:31.267900" elapsed="0.004741"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.265700" elapsed="0.006986"/>
</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-25T23:58:31.272861" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.272712" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.265683" elapsed="0.007263"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.277020" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.274010" elapsed="0.003070"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.273748" elapsed="0.003380"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.273730" elapsed="0.003432"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.280692" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.277536" elapsed="0.003220"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.277237" elapsed="0.003566"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.277215" elapsed="0.003622"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.281584" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.281072" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.282068" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.281716" elapsed="0.000431"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.282804" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.282398" elapsed="0.000442"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.282180" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.281691" elapsed="0.001225"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.283640" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.283146" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.284100" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.283769" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.284823" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.284421" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.284211" elapsed="0.000695"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.283745" elapsed="0.001190"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.285150" elapsed="0.000470"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:31.286269" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.285873" elapsed="0.000422"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.286441" elapsed="0.002270"/>
</kw>
<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="PASS" start="2026-04-25T23:58:31.273322" elapsed="0.015451"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:31.289003" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:31.288879" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.288859" elapsed="0.000229"/>
</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-25T23:58:31.289231" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.289303" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.291437" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.260888" elapsed="0.030575"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.291531" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.291682" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.114894" elapsed="0.176813"/>
</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-25T23:58:31.292051" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.291808" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.291790" elapsed="0.000354"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.292175" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:31.110681" elapsed="0.181614"/>
</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="PASS" start="2026-04-25T23:58:31.108473" elapsed="0.183884"/>
</kw>
<var name="${suffix}">10000</var>
<status status="PASS" start="2026-04-25T23:58:31.104663" elapsed="0.187728"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.292936" level="INFO">${count} = 3</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-25T23:58:31.292612" elapsed="0.000364"/>
</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-25T23:58:31.297343" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.297050" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:31.297414" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:31.297557" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:31.296700" elapsed="0.000880"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.298151" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:58:31.297732" elapsed="0.000446"/>
</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-25T23:58:31.330331" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.329940" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.331153" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.330832" elapsed="0.000386">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.331309" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.330512" elapsed="0.000822"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.331870" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.331495" elapsed="0.000401"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.332242" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.332379" 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-25T23:58:31.332070" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.332793" 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-25T23:58:31.332552" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.334017" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.333521" elapsed="0.000541"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.334626" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.334215" elapsed="0.000437"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.335700" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:31.335040" elapsed="0.000701"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:31.337400" level="INFO">${encoded} = working-pair-3</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-25T23:58:31.337021" elapsed="0.000415"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:31.337513" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:31.337886" level="INFO">${encoded_value} = working-pair-3</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-25T23:58:31.336205" elapsed="0.001721"/>
</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-25T23:58:31.338162" elapsed="0.000512"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:58:31.334864" elapsed="0.003907"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.334699" elapsed="0.004109"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.338852" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:31.339025" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:31.333203" elapsed="0.005847"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.332902" elapsed="0.006180"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.339259" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.339114" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.332883" elapsed="0.006454"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.339905" 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-25T23:58:31.339472" elapsed="0.000460"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.339998" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.329326" elapsed="0.010797"/>
</kw>
<msg time="2026-04-25T23:58:31.340174" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.317431" elapsed="0.022791"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.352292" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.364008" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.375775" 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-25T23:58:31.375980" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.376152" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.376514" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.376374" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.376358" 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-25T23:58:31.376731" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.376892" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.377068" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.376328" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.376226" elapsed="0.000922"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.377288" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.377363" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.377480" 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-25T23:58:31.313387" elapsed="0.064119"/>
</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-25T23:58:31.401014" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.400612" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.401955" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.401519" elapsed="0.000532">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.402146" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.401197" elapsed="0.000973"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.402706" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.402326" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.403037" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.403180" 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-25T23:58:31.402885" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.403603" 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-25T23:58:31.403361" elapsed="0.000287"/>
</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-25T23:58:31.404018" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.403712" elapsed="0.000409"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.404585" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:58:31.404290" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.404148" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.403694" elapsed="0.000972"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.405365" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:31.404805" elapsed="0.000589"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.405442" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.400013" elapsed="0.005553"/>
</kw>
<msg time="2026-04-25T23:58:31.405618" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.388023" elapsed="0.017642"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.417614" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.429352" elapsed="0.000065"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.441636" elapsed="0.000073"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.442025" elapsed="0.000026"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.442212" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.442675" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.442523" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.442503" elapsed="0.000256"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.442898" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.443076" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.443236" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.442458" elapsed="0.000830"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.442303" elapsed="0.001014"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.443457" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.443538" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:58:31.443712" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:31.387153" elapsed="0.056672"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.445338" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.445029" elapsed="0.000391">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.445514" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.444599" elapsed="0.000939"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.445891" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.445610" elapsed="0.000337"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.446461" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.446170" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.445986" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.445590" elapsed="0.000951"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.448843" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:31.446685" elapsed="0.002184"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:31.448923" elapsed="0.000058"/>
</return>
<msg time="2026-04-25T23:58:31.449115" 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-chromium/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-25T23:58:31.444233" elapsed="0.004907"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.450774" 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-25T23:58:31.450504" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.451218" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:31.450983" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.451647" 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-25T23:58:31.451408" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.452085" 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-25T23:58:31.451833" elapsed="0.000295"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:31.452923" 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-25T23:58:31.452722" elapsed="0.000227"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:31.453289" 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-25T23:58:31.453116" elapsed="0.000198"/>
</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-25T23:58:31.453457" elapsed="0.000217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.454099" 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-25T23:58:31.453839" elapsed="0.000303"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:31.454186" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:58:31.454353" 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-25T23:58:31.452327" elapsed="0.002050"/>
</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-25T23:58:31.461587" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:31.461733" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.461878" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:31.456802" elapsed="0.005104"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.454458" elapsed="0.007533"/>
</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-25T23:58:31.462228" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.462029" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.454436" elapsed="0.007888"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.465776" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.463483" elapsed="0.002339"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.463247" elapsed="0.002610"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.463227" elapsed="0.002655"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.468402" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.466165" elapsed="0.002283"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.465936" elapsed="0.002545"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.465920" elapsed="0.002585"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.469083" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.468679" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.469412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.469179" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.469999" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.469647" elapsed="0.000379"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.469491" elapsed="0.000571"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.469161" elapsed="0.000923"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.470776" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.470237" elapsed="0.000577"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.471267" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.470913" elapsed="0.000436"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.472062" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.471608" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.471384" elapsed="0.000766"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.470888" elapsed="0.001293"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.472392" elapsed="0.000503"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:31.473565" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.473149" elapsed="0.000454"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.473838" elapsed="0.003539"/>
</kw>
<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="PASS" start="2026-04-25T23:58:31.462747" elapsed="0.014725"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:31.477766" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-25T23:58:31.477592" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.477565" elapsed="0.000335"/>
</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-25T23:58:31.478129" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.478228" elapsed="0.000022"/>
</return>
<msg time="2026-04-25T23:58:31.481418" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.449498" elapsed="0.031957"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.481608" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T23:58:31.481873" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.302777" elapsed="0.179133"/>
</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-25T23:58:31.482374" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.482084" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.482058" elapsed="0.000408"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.482498" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:31.298422" elapsed="0.184198"/>
</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="PASS" start="2026-04-25T23:58:31.296248" elapsed="0.186435"/>
</kw>
<var name="${suffix}">15000</var>
<status status="PASS" start="2026-04-25T23:58:31.292483" elapsed="0.190235"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.483295" level="INFO">${count} = 4</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-25T23:58:31.482952" elapsed="0.000369"/>
</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-25T23:58:31.487732" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.487440" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:31.487803" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:31.487947" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:31.487104" elapsed="0.000882"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.488517" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:58:31.488140" elapsed="0.000405"/>
</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-25T23:58:31.522104" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.521703" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.522976" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.522614" elapsed="0.000440">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.523148" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.522289" elapsed="0.000883"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.523707" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.523328" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.524037" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.524188" 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-25T23:58:31.523886" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.524603" 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-25T23:58:31.524362" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.525823" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.525323" elapsed="0.000546"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.526464" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.526039" elapsed="0.000452"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.527594" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:31.526904" elapsed="0.000734"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:31.529316" level="INFO">${encoded} = working-pair-4</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-25T23:58:31.528917" elapsed="0.000435"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:31.529431" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:31.529791" level="INFO">${encoded_value} = working-pair-4</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-25T23:58:31.528111" elapsed="0.001722"/>
</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-25T23:58:31.530075" elapsed="0.000528"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:58:31.526743" elapsed="0.003963"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.526575" elapsed="0.004169"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.530787" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.530943" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:31.525011" elapsed="0.005972"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.524712" elapsed="0.006304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.531186" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.531041" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.524693" elapsed="0.006569"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.532040" 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-25T23:58:31.531592" elapsed="0.000475"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.532115" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.521105" elapsed="0.011132"/>
</kw>
<msg time="2026-04-25T23:58:31.532289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.509080" elapsed="0.023257"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.544443" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.556158" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.567841" 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-25T23:58:31.568041" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.568209" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.568558" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.568420" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.568406" elapsed="0.000266"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.568811" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.568989" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.569152" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.568378" elapsed="0.000831"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.568282" elapsed="0.000961"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.569393" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.569470" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.569587" 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-25T23:58:31.504984" elapsed="0.064630"/>
</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-25T23:58:31.593701" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.593303" elapsed="0.000463"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.594617" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.594276" elapsed="0.000416">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.594788" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.593929" elapsed="0.000884"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.595390" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.594999" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.595721" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.595875" 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-25T23:58:31.595574" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.596322" 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-25T23:58:31.596072" elapsed="0.000298"/>
</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-25T23:58:31.596740" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.596441" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.597290" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:58:31.596989" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.596828" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.596420" elapsed="0.000956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.598116" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:31.597518" elapsed="0.000628"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.598198" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.592680" elapsed="0.005645"/>
</kw>
<msg time="2026-04-25T23:58:31.598425" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.580520" elapsed="0.017956"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.610594" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.622534" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.634465" 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-25T23:58:31.634657" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.634828" 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-25T23:58:31.635216" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.635064" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.635049" elapsed="0.000250"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.635435" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.635596" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.635757" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.635020" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.634902" elapsed="0.000933"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.635988" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.636064" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.636179" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:31.579646" elapsed="0.056567"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.637464" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.637225" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.637621" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.636868" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.638047" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.637785" elapsed="0.000320"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.638604" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.638309" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.638130" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.637765" elapsed="0.000921"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.640974" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:31.638831" elapsed="0.002171"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:31.641054" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.641206" 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-chromium/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-25T23:58:31.636547" elapsed="0.004684"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.642766" 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-25T23:58:31.642519" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.643216" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:31.642975" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.643673" 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-25T23:58:31.643423" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.644121" 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-25T23:58:31.643862" elapsed="0.000302"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:31.644975" 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-25T23:58:31.644766" elapsed="0.000238"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:31.645326" 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-25T23:58:31.645154" elapsed="0.000203"/>
</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-25T23:58:31.645505" elapsed="0.000205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.646170" 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-25T23:58:31.645904" elapsed="0.000310"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:31.646256" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:31.646419" 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-25T23:58:31.644368" elapsed="0.002077"/>
</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-25T23:58:31.653441" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:31.653500" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.653602" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:31.648722" elapsed="0.004907"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.646517" elapsed="0.007160"/>
</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-25T23:58:31.653895" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.653704" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.646499" elapsed="0.007510"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.658567" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.655362" elapsed="0.003276"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.655062" elapsed="0.003626"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.655037" elapsed="0.003686"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.662381" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.659123" elapsed="0.003324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.658801" elapsed="0.003742"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.658778" elapsed="0.003805"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.663384" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.662817" elapsed="0.000606"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.663856" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.663524" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.664642" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.664220" elapsed="0.000459"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.663998" elapsed="0.000743"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.663497" elapsed="0.001275"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.665526" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.665007" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.666106" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.665663" elapsed="0.000530"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.666693" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.666393" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.666227" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.665638" elapsed="0.001145"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.666926" elapsed="0.000360"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:31.667719" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.667444" elapsed="0.000302"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.667892" elapsed="0.002349"/>
</kw>
<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="PASS" start="2026-04-25T23:58:31.654420" elapsed="0.015885"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:31.670636" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:31.670531" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.670358" elapsed="0.000362"/>
</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-25T23:58:31.670860" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.670927" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.673092" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.641559" elapsed="0.031559"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.673188" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.673341" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.494384" elapsed="0.178980"/>
</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-25T23:58:31.673693" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.673466" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.673449" elapsed="0.000351"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.673832" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:31.488787" elapsed="0.185166"/>
</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="PASS" start="2026-04-25T23:58:31.486629" elapsed="0.187438"/>
</kw>
<var name="${suffix}">20000</var>
<status status="PASS" start="2026-04-25T23:58:31.482821" elapsed="0.191282"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.674656" level="INFO">${count} = 5</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-25T23:58:31.674326" elapsed="0.000357"/>
</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-25T23:58:31.679080" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.678770" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:31.679151" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.679298" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:31.678436" elapsed="0.000886"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.679848" level="INFO">&amp;{mapping} = { ID=working-pair-5 }</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-25T23:58:31.679475" elapsed="0.000400"/>
</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-25T23:58:31.712283" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.711891" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.713105" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.712790" elapsed="0.000381">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.713265" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.712468" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.713839" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.713446" elapsed="0.000419"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.714167" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.714296" 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-25T23:58:31.714034" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.714722" 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-25T23:58:31.714474" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.715911" level="INFO">mapping: {'ID': 'working-pair-5'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.715444" elapsed="0.000526"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.716536" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.716126" elapsed="0.000436"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.717609" level="INFO">${value} = working-pair-5</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:31.716934" elapsed="0.000716"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:31.719318" level="INFO">${encoded} = working-pair-5</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-25T23:58:31.718925" elapsed="0.000429"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:31.719429" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:31.719763" level="INFO">${encoded_value} = working-pair-5</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-25T23:58:31.718133" elapsed="0.001670"/>
</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-25T23:58:31.720035" elapsed="0.000516"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-5</var>
<status status="PASS" start="2026-04-25T23:58:31.716777" elapsed="0.003874"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.716611" elapsed="0.004077"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.720731" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.720887" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:31.715134" elapsed="0.005818"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.714831" elapsed="0.006172"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.721175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.721029" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.714813" elapsed="0.006440"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.721865" 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-25T23:58:31.721393" elapsed="0.000500"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.721942" elapsed="0.000110"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.711292" elapsed="0.010859"/>
</kw>
<msg time="2026-04-25T23:58:31.722204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.699322" elapsed="0.022931"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.734391" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.746200" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.757820" 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-25T23:58:31.758019" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.758189" 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-25T23:58:31.758542" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.758403" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.758389" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.758752" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.758914" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.759089" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.758361" elapsed="0.000781"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.758262" elapsed="0.000905"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.759304" elapsed="0.000026"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.759385" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.759496" 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-25T23:58:31.695251" elapsed="0.064270"/>
</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-25T23:58:31.783006" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.782605" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.783839" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.783523" elapsed="0.000387">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.784026" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.783197" elapsed="0.000854"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.784597" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.784210" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.784914" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.785075" 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-25T23:58:31.784778" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.785500" 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-25T23:58:31.785251" elapsed="0.000295"/>
</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-25T23:58:31.785933" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.785615" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.786465" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</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-25T23:58:31.786174" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.786034" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.785595" elapsed="0.000952"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.787243" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:31.786685" elapsed="0.000587"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.787321" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.781973" elapsed="0.005475"/>
</kw>
<msg time="2026-04-25T23:58:31.787501" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.770046" elapsed="0.017504"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.799621" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.811298" elapsed="0.000106"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.823526" 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-25T23:58:31.823714" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.823880" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.824254" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.824116" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.824102" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.824464" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.824621" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.824777" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.824072" elapsed="0.000757"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.823955" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.825007" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.825082" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:31.825202" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:31.769167" elapsed="0.056063"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.826488" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.826245" elapsed="0.000308">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.826643" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.825898" elapsed="0.000769"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.826996" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.826735" elapsed="0.000318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.827535" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.827243" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.827077" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.826717" elapsed="0.000898"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.829883" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:31.827761" elapsed="0.002148"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:31.829971" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:31.830126" 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-chromium/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-25T23:58:31.825554" elapsed="0.004636"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.831681" 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-25T23:58:31.831439" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.832122" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:31.831869" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.832546" 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-25T23:58:31.832308" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.832977" 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-25T23:58:31.832729" elapsed="0.000292"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:31.833811" 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-25T23:58:31.833603" elapsed="0.000233"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:31.834177" 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-25T23:58:31.833999" elapsed="0.000202"/>
</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-25T23:58:31.834343" elapsed="0.000202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.834937" 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-25T23:58:31.834697" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:31.835039" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.835190" 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-25T23:58:31.833214" elapsed="0.002000"/>
</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-25T23:58:31.842382" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:31.842431" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.842519" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:31.837532" elapsed="0.005013"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.835284" elapsed="0.007306"/>
</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-25T23:58:31.842763" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.842615" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.835266" elapsed="0.007584"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.846192" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.843891" elapsed="0.002344"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.843651" elapsed="0.002625"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.843633" elapsed="0.002682"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.849848" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.846682" elapsed="0.003229"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.846390" elapsed="0.003586"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.846368" elapsed="0.003645"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.850742" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.850229" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.851211" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.850873" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.851944" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.851534" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.851323" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.850848" elapsed="0.001231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.852836" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.852289" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.853305" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.852989" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.854096" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.853628" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.853416" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.852944" elapsed="0.001265"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.854370" elapsed="0.000337"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:31.855156" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:31.854862" elapsed="0.000319"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.855327" elapsed="0.002278"/>
</kw>
<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="PASS" start="2026-04-25T23:58:31.843218" elapsed="0.014449"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:31.857861" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:31.857755" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.857736" elapsed="0.000209"/>
</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-25T23:58:31.858110" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.858177" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.860306" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.830513" elapsed="0.029819"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.860400" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.860552" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.684606" elapsed="0.175971"/>
</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-25T23:58:31.860906" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.860678" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.860661" elapsed="0.000352"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.861046" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:58:31.680134" elapsed="0.181035"/>
</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="PASS" start="2026-04-25T23:58:31.677978" elapsed="0.183254"/>
</kw>
<var name="${suffix}">25000</var>
<status status="PASS" start="2026-04-25T23:58:31.674197" elapsed="0.187069"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.861826" level="INFO">${count} = 6</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-25T23:58:31.861488" elapsed="0.000364"/>
</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-25T23:58:31.866265" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.865952" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:31.866336" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:31.866482" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:31.865594" elapsed="0.000912"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.867094" level="INFO">&amp;{mapping} = { ID=working-pair-6 }</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-25T23:58:31.866698" elapsed="0.000424"/>
</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-25T23:58:31.899310" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:31.898928" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.900136" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.899812" elapsed="0.000391">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.900296" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.899494" elapsed="0.000826"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.900850" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.900475" elapsed="0.000401"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.901178" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.901318" 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-25T23:58:31.901044" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.901755" 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-25T23:58:31.901490" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.902945" level="INFO">mapping: {'ID': 'working-pair-6'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:31.902482" elapsed="0.000524"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.903566" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:31.903159" elapsed="0.000433"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.904636" level="INFO">${value} = working-pair-6</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:31.903979" elapsed="0.000696"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:31.906339" level="INFO">${encoded} = working-pair-6</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-25T23:58:31.905947" elapsed="0.000427"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:31.906451" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:31.906789" level="INFO">${encoded_value} = working-pair-6</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-25T23:58:31.905142" elapsed="0.001688"/>
</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-25T23:58:31.907069" elapsed="0.000513"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-6</var>
<status status="PASS" start="2026-04-25T23:58:31.903806" elapsed="0.003877"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.903641" elapsed="0.004079"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:31.907763" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:31.907917" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:31.902171" elapsed="0.005771"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.901868" elapsed="0.006121"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.908163" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.908019" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.901849" elapsed="0.006392"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.908805" 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-25T23:58:31.908376" elapsed="0.000456"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.908880" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.898331" elapsed="0.010689"/>
</kw>
<msg time="2026-04-25T23:58:31.909105" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.886407" elapsed="0.022753"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.921311" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.933215" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.944940" elapsed="0.000038"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.945141" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.945310" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.945663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.945525" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:31.945510" elapsed="0.000249"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.945894" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.946070" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.946229" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:31.945481" elapsed="0.000799"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.945383" elapsed="0.000922"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.946442" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:31.946517" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:31.946629" 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-25T23:58:31.882317" elapsed="0.064338"/>
</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-25T23:58:31.970117" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.969731" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.970913" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:31.970619" elapsed="0.000382">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:31.971132" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:31.970299" elapsed="0.000857"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.971690" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:31.971314" elapsed="0.000402"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:31.972018" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:31.972150" 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-25T23:58:31.971869" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.972565" 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-25T23:58:31.972325" elapsed="0.000286"/>
</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-25T23:58:31.972971" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:31.972677" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.973480" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</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-25T23:58:31.973194" elapsed="0.000312"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:31.973055" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:31.972658" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.974273" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:31.973697" elapsed="0.000604"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:31.974350" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:31.969126" elapsed="0.005347"/>
</kw>
<msg time="2026-04-25T23:58:31.974524" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:31.957218" elapsed="0.017354"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.986497" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:31.998197" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.009834" 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-25T23:58:32.010040" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.010210" 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-25T23:58:32.010620" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.010480" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.010465" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.010831" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.011006" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.011168" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.010434" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.010330" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.011381" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.011455" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.011580" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:31.956369" elapsed="0.055239"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.012873" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.012624" elapsed="0.000317">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.013049" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.012279" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.013388" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.013143" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.013934" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.013636" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.013466" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.013124" elapsed="0.000911"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.016279" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.014184" elapsed="0.002121"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.016359" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.016510" 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-chromium/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-25T23:58:32.011936" elapsed="0.004598"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.018071" 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-25T23:58:32.017808" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.018501" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:32.018263" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.018927" 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-25T23:58:32.018690" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.019367" 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-25T23:58:32.019133" elapsed="0.000277"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.020205" 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-25T23:58:32.020011" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.020587" 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-25T23:58:32.020414" elapsed="0.000199"/>
</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-25T23:58:32.020756" elapsed="0.000213"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.021368" 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-25T23:58:32.021120" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.021454" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.021608" 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-25T23:58:32.019603" elapsed="0.002030"/>
</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-25T23:58:32.028231" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.028281" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.028371" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.023862" elapsed="0.004535"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.021702" elapsed="0.006739"/>
</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-25T23:58:32.028613" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.028467" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.021685" elapsed="0.007015"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.031941" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.029704" elapsed="0.002297"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.029491" elapsed="0.002545"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.029474" elapsed="0.002586"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.034632" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.032332" elapsed="0.002346"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.032114" elapsed="0.002598"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.032098" elapsed="0.002639"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.035289" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.034898" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.035610" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.035385" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.036155" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.035842" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.035690" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.035367" elapsed="0.000871"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.036742" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.036387" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.037076" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.036837" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.037603" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.037310" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.037157" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.036819" elapsed="0.000866"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.037858" elapsed="0.000360"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.038804" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.038425" elapsed="0.000415"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.039116" elapsed="0.003192"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.029062" elapsed="0.013334"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.042641" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.042495" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.042470" elapsed="0.000288"/>
</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-25T23:58:32.042951" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.043066" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:58:32.046134" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.016853" elapsed="0.029319"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.046267" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:58:32.046424" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:31.871720" elapsed="0.174728"/>
</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-25T23:58:32.046778" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.046549" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.046532" elapsed="0.000338"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.046902" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:58:31.867368" elapsed="0.179683"/>
</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="PASS" start="2026-04-25T23:58:31.865131" elapsed="0.181982"/>
</kw>
<var name="${suffix}">30000</var>
<status status="PASS" start="2026-04-25T23:58:31.861360" elapsed="0.185786"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.047809" level="INFO">${count} = 7</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-25T23:58:32.047370" elapsed="0.000466"/>
</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-25T23:58:32.052233" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.051923" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.052304" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:32.052447" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.051587" elapsed="0.000883"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.053019" level="INFO">&amp;{mapping} = { ID=working-pair-7 }</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-25T23:58:32.052625" elapsed="0.000421"/>
</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-25T23:58:32.086727" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.086351" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.087582" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.087261" elapsed="0.000389">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.087742" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.086915" elapsed="0.000851"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.088372" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.087989" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.088685" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.088829" 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-25T23:58:32.088551" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.089261" 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-25T23:58:32.089018" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.090479" level="INFO">mapping: {'ID': 'working-pair-7'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.090013" elapsed="0.000511"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.091100" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.090677" elapsed="0.000449"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.092175" level="INFO">${value} = working-pair-7</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:32.091498" elapsed="0.000718"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:32.093877" level="INFO">${encoded} = working-pair-7</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-25T23:58:32.093485" elapsed="0.000428"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:32.094007" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:32.094353" level="INFO">${encoded_value} = working-pair-7</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-25T23:58:32.092662" elapsed="0.001731"/>
</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-25T23:58:32.094613" elapsed="0.000535"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-7</var>
<status status="PASS" start="2026-04-25T23:58:32.091340" elapsed="0.003910"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.091174" elapsed="0.004118"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.095336" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.095493" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:32.089658" elapsed="0.005860"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.089371" elapsed="0.006179"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.095719" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.095575" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.089352" elapsed="0.006444"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.096379" 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-25T23:58:32.095934" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.096454" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.085700" elapsed="0.010877"/>
</kw>
<msg time="2026-04-25T23:58:32.096628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.073668" elapsed="0.023009"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.108891" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.120590" elapsed="0.000064"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.132379" 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-25T23:58:32.132568" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.132736" 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-25T23:58:32.133106" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.132951" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.132937" elapsed="0.000248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.133318" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.133476" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.133633" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.132909" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.132809" elapsed="0.000901"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.133874" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.133950" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.134077" 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-25T23:58:32.069555" elapsed="0.064547"/>
</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-25T23:58:32.157588" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.157216" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.158423" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.158126" elapsed="0.000364">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.158581" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.157785" elapsed="0.000820"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.159165" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.158762" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.159479" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.159610" 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-25T23:58:32.159346" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.160083" 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-25T23:58:32.159821" elapsed="0.000309"/>
</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-25T23:58:32.160489" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.160196" elapsed="0.000351"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.161011" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</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-25T23:58:32.160708" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.160571" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.160177" elapsed="0.000918"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.161783" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:32.161233" elapsed="0.000579"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.161862" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.156602" elapsed="0.005411"/>
</kw>
<msg time="2026-04-25T23:58:32.162067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.144651" elapsed="0.017466"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.174041" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.185807" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.197692" elapsed="0.000047"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.197913" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.198102" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.198477" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.198336" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.198320" 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-25T23:58:32.198691" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.198853" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.199026" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.198289" elapsed="0.000791"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.198180" elapsed="0.000925"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.199292" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.199370" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.199499" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:32.143798" elapsed="0.055729"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.200811" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.200561" elapsed="0.000318">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.200987" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.200210" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.201327" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.201084" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.201881" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.201575" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.201406" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.201065" elapsed="0.000911"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.204228" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.202124" elapsed="0.002130"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.204305" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:32.204459" 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-chromium/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-25T23:58:32.199865" elapsed="0.004619"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.206043" 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-25T23:58:32.205777" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.206475" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:32.206239" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.206908" 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-25T23:58:32.206667" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.207355" 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-25T23:58:32.207115" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.208213" 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-25T23:58:32.208016" elapsed="0.000223"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.208559" 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-25T23:58:32.208387" elapsed="0.000197"/>
</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-25T23:58:32.208727" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.209341" 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-25T23:58:32.209096" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.209427" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.209581" 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-25T23:58:32.207602" elapsed="0.002004"/>
</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-25T23:58:32.216729" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.216777" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.216877" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.211915" elapsed="0.004988"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.209676" elapsed="0.007273"/>
</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-25T23:58:32.217149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.216996" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.209659" elapsed="0.007580"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.220629" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.218291" elapsed="0.002381"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.218076" elapsed="0.002632"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.218058" elapsed="0.002675"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.223288" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.221014" elapsed="0.002320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.220787" elapsed="0.002581"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.220771" elapsed="0.002621"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.223924" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.223549" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.224266" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.224037" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.224800" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.224503" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.224348" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.224019" elapsed="0.000864"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.225410" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.225051" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.225827" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.225504" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.226493" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.226126" elapsed="0.000403"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.225942" elapsed="0.000635"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.225487" elapsed="0.001120"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.226804" elapsed="0.000512"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.227915" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.227535" elapsed="0.000415"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.228189" elapsed="0.003218"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.217593" elapsed="0.013902"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.231742" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.231595" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.231569" elapsed="0.000289"/>
</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-25T23:58:32.232076" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.232171" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:58:32.235246" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.204804" elapsed="0.030479"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.235381" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:58:32.235590" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.058868" elapsed="0.176756"/>
</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-25T23:58:32.236107" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.235766" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.235742" elapsed="0.000494"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.236282" elapsed="0.000036"/>
</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="PASS" start="2026-04-25T23:58:32.053287" elapsed="0.183165"/>
</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="PASS" start="2026-04-25T23:58:32.051133" elapsed="0.185404"/>
</kw>
<var name="${suffix}">35000</var>
<status status="PASS" start="2026-04-25T23:58:32.047239" elapsed="0.189343"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.237367" level="INFO">${count} = 8</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-25T23:58:32.236890" elapsed="0.000514"/>
</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-25T23:58:32.242178" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.241864" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.242250" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:32.242402" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.241505" elapsed="0.000923"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.242976" level="INFO">&amp;{mapping} = { ID=working-pair-8 }</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-25T23:58:32.242584" elapsed="0.000421"/>
</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-25T23:58:32.275478" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.275106" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.276309" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.275997" elapsed="0.000379">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.276468" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.275661" elapsed="0.000831"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.277051" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.276649" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.277366" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.277511" 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-25T23:58:32.277231" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.277954" 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-25T23:58:32.277686" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.279208" level="INFO">mapping: {'ID': 'working-pair-8'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.278724" elapsed="0.000529"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.279819" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.279405" elapsed="0.000440"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.280897" level="INFO">${value} = working-pair-8</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:32.280234" elapsed="0.000704"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:32.282611" level="INFO">${encoded} = working-pair-8</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-25T23:58:32.282227" elapsed="0.000420"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:32.282726" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:32.283082" level="INFO">${encoded_value} = working-pair-8</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-25T23:58:32.281405" elapsed="0.001717"/>
</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-25T23:58:32.283342" elapsed="0.000516"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-8</var>
<status status="PASS" start="2026-04-25T23:58:32.280075" elapsed="0.003898"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.279894" elapsed="0.004119"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.284057" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.284216" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:32.278412" elapsed="0.005829"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.278124" elapsed="0.006149"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.284441" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.284299" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.278104" elapsed="0.006413"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.285108" 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-25T23:58:32.284654" elapsed="0.000481"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.285183" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.274491" elapsed="0.010813"/>
</kw>
<msg time="2026-04-25T23:58:32.285356" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.262511" elapsed="0.022895"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.297544" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.309330" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.321078" 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-25T23:58:32.321307" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.321476" 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-25T23:58:32.321847" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.321690" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.321675" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.322086" 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-25T23:58:32.322267" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.322445" elapsed="0.000028"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.321648" elapsed="0.000857"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.321550" elapsed="0.000981"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.322670" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.322745" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.322854" 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-25T23:58:32.258441" elapsed="0.064438"/>
</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-25T23:58:32.346217" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.345831" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.347039" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.346721" elapsed="0.000388">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.347202" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.346399" elapsed="0.000827"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.347769" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.347381" elapsed="0.000415"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.348141" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.348276" 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-25T23:58:32.347987" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.348705" 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-25T23:58:32.348450" 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-25T23:58:32.349138" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.348824" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.349663" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</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-25T23:58:32.349367" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.349224" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.348805" elapsed="0.000969"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.350513" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:32.349947" elapsed="0.000627"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.350626" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.345214" elapsed="0.005537"/>
</kw>
<msg time="2026-04-25T23:58:32.350805" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.333328" elapsed="0.017524"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.362824" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.374648" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.386258" 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-25T23:58:32.386447" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.386613" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.386977" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.386826" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.386811" elapsed="0.000246"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.387190" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.387348" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.387504" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.386783" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.386686" elapsed="0.000895"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.387717" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.387792" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.387908" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:32.332481" elapsed="0.055454"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.389223" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.388982" elapsed="0.000306">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.389379" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.388635" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.389707" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.389470" elapsed="0.000324"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.390291" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.390001" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.389818" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.389452" elapsed="0.000926"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.392610" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.390520" elapsed="0.002116"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.392686" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.392838" 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-chromium/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-25T23:58:32.388314" elapsed="0.004548"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.394400" 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-25T23:58:32.394151" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.394819" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:32.394587" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.395259" 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-25T23:58:32.395021" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.395675" 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-25T23:58:32.395443" elapsed="0.000274"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.396503" 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-25T23:58:32.396315" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.396843" 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-25T23:58:32.396674" elapsed="0.000193"/>
</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-25T23:58:32.397022" elapsed="0.000199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.397612" 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-25T23:58:32.397372" elapsed="0.000281"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.397693" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:58:32.397859" 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-25T23:58:32.395910" elapsed="0.001973"/>
</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-25T23:58:32.404722" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.404777" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.404876" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.400129" elapsed="0.004773"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.397952" elapsed="0.007001"/>
</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-25T23:58:32.405177" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.405004" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.397935" elapsed="0.007381"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.408660" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.406397" elapsed="0.002306"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.406174" elapsed="0.002564"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.406155" elapsed="0.002608"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.411313" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.409050" elapsed="0.002309"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.408816" elapsed="0.002578"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.408800" elapsed="0.002618"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.411986" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.411585" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.412312" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.412085" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.412840" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.412546" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.412393" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.412066" elapsed="0.000855"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.413440" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.413086" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.413788" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.413533" elapsed="0.000312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.414323" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.414033" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.413868" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.413516" elapsed="0.000887"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.414546" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.415345" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.415056" elapsed="0.000314"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.415517" elapsed="0.002347"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.405691" elapsed="0.012252"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.418168" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.418049" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.418028" elapsed="0.000234"/>
</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-25T23:58:32.418417" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.418488" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.420700" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.393198" elapsed="0.027531"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.420808" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:58:32.420991" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.247678" elapsed="0.173340"/>
</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-25T23:58:32.421499" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.421130" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.421111" elapsed="0.000490"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.421635" elapsed="0.000027"/>
</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="PASS" start="2026-04-25T23:58:32.243252" elapsed="0.178568"/>
</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="PASS" start="2026-04-25T23:58:32.240987" elapsed="0.180900"/>
</kw>
<var name="${suffix}">40000</var>
<status status="PASS" start="2026-04-25T23:58:32.236710" elapsed="0.185215"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.422599" level="INFO">${count} = 9</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-25T23:58:32.422201" elapsed="0.000426"/>
</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-25T23:58:32.428050" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.427611" elapsed="0.000472"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.428140" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T23:58:32.428310" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.427069" elapsed="0.001264"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.428892" level="INFO">&amp;{mapping} = { ID=working-pair-9 }</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-25T23:58:32.428497" elapsed="0.000423"/>
</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-25T23:58:32.462230" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.461820" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.463161" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.462758" elapsed="0.000481">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.463339" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.462431" elapsed="0.000932"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.463907" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.463520" elapsed="0.000413"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.464248" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.464454" 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-25T23:58:32.464105" elapsed="0.000375"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.464880" 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-25T23:58:32.464632" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.466184" level="INFO">mapping: {'ID': 'working-pair-9'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.465638" elapsed="0.000593"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.466834" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.466387" elapsed="0.000474"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.468019" level="INFO">${value} = working-pair-9</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:32.467305" elapsed="0.000757"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:32.469776" level="INFO">${encoded} = working-pair-9</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-25T23:58:32.469361" elapsed="0.000453"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:32.469898" elapsed="0.000101"/>
</return>
<msg time="2026-04-25T23:58:32.470277" level="INFO">${encoded_value} = working-pair-9</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-25T23:58:32.468523" elapsed="0.001854"/>
</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-25T23:58:32.470608" elapsed="0.000560"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-9</var>
<status status="PASS" start="2026-04-25T23:58:32.467104" elapsed="0.004174"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.466914" elapsed="0.004404"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.471362" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.471522" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:32.465322" elapsed="0.006225"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.465018" elapsed="0.006563"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.471751" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.471607" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.464994" elapsed="0.006836"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.472427" 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-25T23:58:32.471983" elapsed="0.000471"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.472504" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.461188" elapsed="0.011438"/>
</kw>
<msg time="2026-04-25T23:58:32.472679" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.448986" elapsed="0.023741"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.485101" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.496796" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.508566" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.508772" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.508946" elapsed="0.000035"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.509317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.509178" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.509164" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.509530" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.509701" elapsed="0.000063"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.509910" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.509135" elapsed="0.000879"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.509036" elapsed="0.001006"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.510186" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.510262" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.510373" 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-25T23:58:32.444767" elapsed="0.065631"/>
</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-25T23:58:32.533775" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.533388" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.534591" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.534305" elapsed="0.000351">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.534748" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.533972" elapsed="0.000800"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.535324" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.534926" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.535636" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.535760" 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-25T23:58:32.535504" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.536193" 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-25T23:58:32.535934" 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-25T23:58:32.536588" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.536303" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.537111" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</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-25T23:58:32.536808" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.536671" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.536285" elapsed="0.000908"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.537899" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:32.537336" elapsed="0.000592"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.537991" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.532770" elapsed="0.005346"/>
</kw>
<msg time="2026-04-25T23:58:32.538168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.520924" elapsed="0.017290"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.550059" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.561675" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.573456" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.573641" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.573826" 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-25T23:58:32.574197" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.574061" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.574046" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.574406" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.574563" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.574718" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.574018" elapsed="0.000751"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.573901" elapsed="0.000893"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.574929" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.575017" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.575132" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:32.520092" elapsed="0.055066"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.576367" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.576131" elapsed="0.000300">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.576521" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.575790" elapsed="0.000754"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.576846" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.576611" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.577394" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.577109" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.576925" elapsed="0.000562"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.576593" elapsed="0.000915"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.579785" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.577651" elapsed="0.002159"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.579860" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.580025" 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-chromium/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-25T23:58:32.575480" elapsed="0.004569"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.581525" 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-25T23:58:32.581285" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.581980" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:32.581728" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.582404" 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-25T23:58:32.582168" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.582818" 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-25T23:58:32.582586" elapsed="0.000274"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.583653" 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-25T23:58:32.583465" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.584008" 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-25T23:58:32.583823" elapsed="0.000210"/>
</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-25T23:58:32.584174" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.584757" 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-25T23:58:32.584518" elapsed="0.000282"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.584841" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.585008" 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-25T23:58:32.583070" elapsed="0.001963"/>
</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-25T23:58:32.591787" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.591837" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.591924" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.587254" elapsed="0.004695"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.585103" elapsed="0.006911"/>
</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-25T23:58:32.592187" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.592041" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.585085" elapsed="0.007188"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.595640" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.593284" elapsed="0.002399"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.593066" elapsed="0.002652"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.593048" elapsed="0.002694"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.598291" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.596023" elapsed="0.002314"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.595796" elapsed="0.002574"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.595780" elapsed="0.002614"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.598918" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.598551" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.599293" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.599029" elapsed="0.000326"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.599828" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.599532" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.599378" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.599011" elapsed="0.000900"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.600445" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.600077" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.600765" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.600539" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.601304" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.601013" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.600845" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.600522" elapsed="0.000864"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.601526" elapsed="0.000350"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.602323" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.602049" elapsed="0.000299"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.602493" elapsed="0.002267"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.592622" elapsed="0.012200"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.605030" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.604892" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.604874" elapsed="0.000241"/>
</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-25T23:58:32.605254" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.605320" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.607488" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.580369" elapsed="0.027144"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.607582" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:32.607731" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.433936" elapsed="0.173819"/>
</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-25T23:58:32.608097" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.607856" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.607839" elapsed="0.000350"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.608221" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:32.429204" elapsed="0.179138"/>
</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="PASS" start="2026-04-25T23:58:32.426246" elapsed="0.182156"/>
</kw>
<var name="${suffix}">45000</var>
<status status="PASS" start="2026-04-25T23:58:32.422050" elapsed="0.186385"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.608998" level="INFO">${count} = 10</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-25T23:58:32.608658" elapsed="0.000367"/>
</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-25T23:58:32.613491" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.613185" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.613565" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:32.613741" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.612827" elapsed="0.000941"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.614330" level="INFO">&amp;{mapping} = { ID=working-pair-10 }</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-25T23:58:32.613932" elapsed="0.000425"/>
</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-25T23:58:32.647747" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.647377" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.648598" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.648268" elapsed="0.000402">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.648763" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.647929" elapsed="0.000858"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.649351" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.648943" elapsed="0.000435"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.649667" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.649848" 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-25T23:58:32.649532" elapsed="0.000342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.650284" 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-25T23:58:32.650039" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.651482" level="INFO">mapping: {'ID': 'working-pair-10'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.651013" elapsed="0.000514"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.652106" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.651679" elapsed="0.000453"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.653179" level="INFO">${value} = working-pair-10</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:32.652510" elapsed="0.000710"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:32.654882" level="INFO">${encoded} = working-pair-10</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-25T23:58:32.654501" elapsed="0.000419"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:32.655015" elapsed="0.000077"/>
</return>
<msg time="2026-04-25T23:58:32.655361" level="INFO">${encoded_value} = working-pair-10</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-25T23:58:32.653664" elapsed="0.001737"/>
</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-25T23:58:32.655625" elapsed="0.000534"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-10</var>
<status status="PASS" start="2026-04-25T23:58:32.652351" elapsed="0.003910"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.652183" elapsed="0.004117"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.656344" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.656501" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:32.650687" elapsed="0.005840"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.650402" elapsed="0.006157"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.656728" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.656585" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.650382" elapsed="0.006465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.657444" 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-25T23:58:32.657006" elapsed="0.000466"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.657520" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.646766" elapsed="0.010876"/>
</kw>
<msg time="2026-04-25T23:58:32.657694" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.634818" elapsed="0.022939"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.669883" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.681673" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.693391" 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-25T23:58:32.693701" elapsed="0.000055"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.693906" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.694274" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.694136" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.694121" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.694487" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.694648" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.694807" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.694093" elapsed="0.000766"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.693993" elapsed="0.000893"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.695039" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.695115" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.695224" 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-25T23:58:32.630754" elapsed="0.064496"/>
</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-25T23:58:32.718760" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.718389" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.719568" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.719280" elapsed="0.000353">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.719726" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.718944" elapsed="0.000806"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.720313" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.719907" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.720643" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.720765" 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-25T23:58:32.720502" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.721198" 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-25T23:58:32.720940" 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-25T23:58:32.721589" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.721309" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.722137" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</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-25T23:58:32.721827" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.721671" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.721290" elapsed="0.000930"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.722879" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:32.722358" elapsed="0.000550"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.722970" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.717771" elapsed="0.005326"/>
</kw>
<msg time="2026-04-25T23:58:32.723148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.705785" elapsed="0.017410"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.735170" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.746973" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.758741" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.758927" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.759109" 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-25T23:58:32.759458" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.759320" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.759306" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.759668" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.759825" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.759998" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.759279" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.759182" elapsed="0.000895"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.760215" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.760289" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.760405" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:32.704913" elapsed="0.055518"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.761643" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.761413" elapsed="0.000293">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.761831" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.761085" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.762190" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.761925" elapsed="0.000321"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.762722" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.762435" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.762269" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.761906" elapsed="0.000897"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.765053" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.762946" elapsed="0.002133"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.765130" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.765282" 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-chromium/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-25T23:58:32.760754" elapsed="0.004552"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.766822" 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-25T23:58:32.766579" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.767308" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:32.767032" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.767741" 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-25T23:58:32.767501" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.768181" 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-25T23:58:32.767928" elapsed="0.000295"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.769016" 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-25T23:58:32.768809" elapsed="0.000233"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.769362" 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-25T23:58:32.769191" elapsed="0.000196"/>
</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-25T23:58:32.769529" elapsed="0.000224"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.770178" 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-25T23:58:32.769904" elapsed="0.000318"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.770264" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.770418" 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-25T23:58:32.768417" elapsed="0.002025"/>
</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-25T23:58:32.776676" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.776725" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.776822" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.772694" elapsed="0.004154"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.770512" elapsed="0.006382"/>
</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-25T23:58:32.777096" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.776921" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.770495" elapsed="0.006690"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.780456" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.778237" elapsed="0.002264"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.778021" elapsed="0.002515"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.778002" elapsed="0.002559"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.783113" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.780826" elapsed="0.002333"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.780615" elapsed="0.002580"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.780599" elapsed="0.002621"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.783747" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.783377" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.784085" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.783843" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.784617" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.784320" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.784168" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.783825" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.785226" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.784850" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.785547" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.785321" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.786171" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.785853" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.785628" elapsed="0.000605"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.785303" elapsed="0.000953"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.786400" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.787192" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.786900" elapsed="0.000317"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.787366" elapsed="0.002273"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.777537" elapsed="0.012167"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.789901" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.789792" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.789773" elapsed="0.000230"/>
</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-25T23:58:32.790144" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.790212" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:32.792346" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.765620" elapsed="0.026752"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.792441" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.792593" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.620159" elapsed="0.172458"/>
</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-25T23:58:32.792948" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.792718" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.792701" elapsed="0.000357"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.793091" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:32.614605" elapsed="0.178607"/>
</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="PASS" start="2026-04-25T23:58:32.612354" elapsed="0.180919"/>
</kw>
<var name="${suffix}">50000</var>
<status status="PASS" start="2026-04-25T23:58:32.608529" elapsed="0.184779"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.793882" level="INFO">${count} = 11</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-25T23:58:32.793540" elapsed="0.000369"/>
</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-25T23:58:32.798319" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.798023" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.798392" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.798536" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.797646" elapsed="0.000914"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.799105" level="INFO">&amp;{mapping} = { ID=working-pair-11 }</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-25T23:58:32.798718" elapsed="0.000413"/>
</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-25T23:58:32.831590" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.831161" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.832459" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.832119" elapsed="0.000411">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.832624" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.831778" elapsed="0.000870"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.833210" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.832807" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.833528" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.833673" 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-25T23:58:32.833393" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.834148" 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-25T23:58:32.833884" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.835358" level="INFO">mapping: {'ID': 'working-pair-11'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.834871" elapsed="0.000534"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.835997" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.835560" elapsed="0.000465"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.837089" level="INFO">${value} = working-pair-11</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:32.836408" elapsed="0.000723"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:32.838950" level="INFO">${encoded} = working-pair-11</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-25T23:58:32.838427" elapsed="0.000575"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:32.839083" elapsed="0.000077"/>
</return>
<msg time="2026-04-25T23:58:32.839424" level="INFO">${encoded_value} = working-pair-11</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-25T23:58:32.837573" elapsed="0.001890"/>
</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-25T23:58:32.839684" elapsed="0.000551"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-11</var>
<status status="PASS" start="2026-04-25T23:58:32.836243" elapsed="0.004095"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.836075" elapsed="0.004301"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:32.840420" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:32.840595" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:32.834556" elapsed="0.006064"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.834264" elapsed="0.006388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.840819" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.840677" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.834244" elapsed="0.006651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.841488" 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-25T23:58:32.841047" elapsed="0.000468"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.841564" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.830535" elapsed="0.011150"/>
</kw>
<msg time="2026-04-25T23:58:32.841754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.818494" elapsed="0.023308"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.853998" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.865670" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.877518" 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-25T23:58:32.877705" elapsed="0.000044"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.877898" 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-25T23:58:32.878266" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.878129" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.878114" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.878479" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.878638" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.878797" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.878086" elapsed="0.000763"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.877985" elapsed="0.000889"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.879025" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.879101" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.879211" 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-25T23:58:32.814351" elapsed="0.064885"/>
</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-25T23:58:32.902657" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.902284" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.903471" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:32.903182" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.903629" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.902840" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.904251" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.903846" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.904573" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:32.904697" 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-25T23:58:32.904432" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.905133" 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-25T23:58:32.904872" elapsed="0.000307"/>
</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-25T23:58:32.905528" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.905246" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.906085" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</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-25T23:58:32.905776" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.905611" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.905226" elapsed="0.000940"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.906842" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:32.906305" elapsed="0.000566"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.906919" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:32.901660" elapsed="0.005400"/>
</kw>
<msg time="2026-04-25T23:58:32.907112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.889795" elapsed="0.017365"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.919076" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.930857" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.942603" 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-25T23:58:32.942791" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.942972" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.943365" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.943191" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:32.943176" elapsed="0.000273"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.943584" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.943747" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.943909" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:32.943148" elapsed="0.000829"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.943048" elapsed="0.000957"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.944145" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.944220" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.944337" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:32.888915" elapsed="0.055450"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:32.945597" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:32.945362" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:32.945780" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:32.945029" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.946135" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.945878" elapsed="0.000314"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.946685" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.946385" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.946216" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.945859" elapsed="0.000909"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.949051" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:32.946912" elapsed="0.002165"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:32.949127" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:32.949280" 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-chromium/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-25T23:58:32.944694" elapsed="0.004611"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.950825" 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-25T23:58:32.950581" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.951272" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:32.951034" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.951703" 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-25T23:58:32.951463" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.952145" 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-25T23:58:32.951889" elapsed="0.000300"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:32.952986" 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-25T23:58:32.952781" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:32.953331" 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-25T23:58:32.953160" elapsed="0.000196"/>
</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-25T23:58:32.953551" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.954398" 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-25T23:58:32.954055" elapsed="0.000405"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:32.954504" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:32.954674" 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-25T23:58:32.952387" elapsed="0.002312"/>
</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-25T23:58:32.961971" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:32.962024" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:32.962112" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:32.957022" elapsed="0.005116"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.954770" elapsed="0.007414"/>
</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-25T23:58:32.962359" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.962210" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.954751" elapsed="0.007700"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.965767" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.963473" elapsed="0.002339"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.963250" elapsed="0.002598"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.963232" elapsed="0.002641"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.969238" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:32.966158" elapsed="0.003144"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.965928" elapsed="0.003422"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.965911" elapsed="0.003476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.970202" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.969604" elapsed="0.000636"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.970656" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.970339" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.971418" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.971003" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.970769" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.970311" elapsed="0.001221"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.972261" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.971741" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:32.972708" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.972395" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.973459" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.973051" elapsed="0.000443"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:32.972820" elapsed="0.000723"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.972368" elapsed="0.001204"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:32.973789" elapsed="0.000490"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:32.975147" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:32.974729" elapsed="0.000454"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:32.975401" elapsed="0.003187"/>
</kw>
<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="PASS" start="2026-04-25T23:58:32.962802" elapsed="0.015915"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:32.978917" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:32.978797" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.978777" elapsed="0.000243"/>
</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-25T23:58:32.979162" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:32.979229" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:32.981347" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.949629" elapsed="0.031744"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.981442" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:32.981592" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.803748" elapsed="0.177868"/>
</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-25T23:58:32.981983" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:32.981718" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:32.981701" elapsed="0.000375"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:32.982108" elapsed="0.000026"/>
</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="PASS" start="2026-04-25T23:58:32.799372" elapsed="0.182857"/>
</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="PASS" start="2026-04-25T23:58:32.797194" elapsed="0.185097"/>
</kw>
<var name="${suffix}">55000</var>
<status status="PASS" start="2026-04-25T23:58:32.793411" elapsed="0.188914"/>
</iter>
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.982874" level="INFO">${count} = 12</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-25T23:58:32.982548" elapsed="0.000351"/>
</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-25T23:58:32.987412" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:32.987115" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:32.987482" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:32.987624" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:32.986762" elapsed="0.000886"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:32.988187" level="INFO">&amp;{mapping} = { ID=working-pair-12 }</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-25T23:58:32.987800" elapsed="0.000414"/>
</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-25T23:58:33.020499" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.020131" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.021321" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.021013" elapsed="0.000375">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.021479" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.020680" elapsed="0.000823"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.022079" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:33.021662" elapsed="0.000480"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.022441" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.022573" 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-25T23:58:33.022301" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.023005" 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-25T23:58:33.022746" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.024202" level="INFO">mapping: {'ID': 'working-pair-12'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.023715" elapsed="0.000533"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.024809" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.024403" elapsed="0.000433"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.026046" level="INFO">${value} = working-pair-12</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.025264" elapsed="0.000825"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.027744" level="INFO">${encoded} = working-pair-12</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-25T23:58:33.027364" elapsed="0.000416"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.027861" elapsed="0.000080"/>
</return>
<msg time="2026-04-25T23:58:33.028221" level="INFO">${encoded_value} = working-pair-12</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-25T23:58:33.026549" elapsed="0.001712"/>
</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-25T23:58:33.028482" elapsed="0.000533"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-12</var>
<status status="PASS" start="2026-04-25T23:58:33.025067" elapsed="0.004050"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.024885" elapsed="0.004270"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.029199" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:33.029354" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.023403" elapsed="0.005976"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.023117" elapsed="0.006294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.029580" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.029436" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.023098" elapsed="0.006557"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.030314" 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-25T23:58:33.029824" elapsed="0.000517"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.030388" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.019517" elapsed="0.010992"/>
</kw>
<msg time="2026-04-25T23:58:33.030561" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.007602" elapsed="0.023009"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.042922" elapsed="0.000051"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.054638" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.066399" 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-25T23:58:33.066601" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.066772" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.067151" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.067011" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.066995" 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-25T23:58:33.067364" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.067524" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.067683" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.066951" elapsed="0.000784"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.066845" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.067895" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.067985" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.068103" 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-25T23:58:33.003513" elapsed="0.064616"/>
</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-25T23:58:33.091614" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:33.091244" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.092456" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/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-25T23:58:33.092139" elapsed="0.000387">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.092619" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.091796" elapsed="0.000846"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.093199" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:33.092796" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.093512" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.093653" 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-25T23:58:33.093379" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.094117" 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-25T23:58:33.093856" elapsed="0.000307"/>
</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-25T23:58:33.094507" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.094228" elapsed="0.000371"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.095069" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</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-25T23:58:33.094764" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.094625" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.094210" elapsed="0.000942"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.095820" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:33.095290" elapsed="0.000559"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.095897" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.090545" elapsed="0.005516"/>
</kw>
<msg time="2026-04-25T23:58:33.096118" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.078603" elapsed="0.017563"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.108033" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.119735" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/subscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.131385" 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-25T23:58:33.131572" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.131737" 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-25T23:58:33.132099" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.131946" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.131931" elapsed="0.000245"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.132307" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.132465" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.132621" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.131905" elapsed="0.000768"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.131808" elapsed="0.000890"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.132834" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.132906" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:33.133034" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:33.077722" elapsed="0.055370"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.134317" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/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-25T23:58:33.134087" elapsed="0.000292">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/subscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.134470" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.133743" elapsed="0.000750"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.134803" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.134562" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.135352" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.135066" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.134883" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.134544" elapsed="0.000888"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.137685" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.135573" elapsed="0.002138"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:33.137783" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.137934" 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-chromium/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-25T23:58:33.133417" elapsed="0.004555"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.139456" 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-25T23:58:33.139214" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.139881" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:33.139646" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.140319" 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-25T23:58:33.140083" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.140734" 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-25T23:58:33.140502" elapsed="0.000274"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:33.141561" 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-25T23:58:33.141373" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:33.141934" 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-25T23:58:33.141761" elapsed="0.000212"/>
</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-25T23:58:33.142116" elapsed="0.000200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.142703" 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-25T23:58:33.142464" elapsed="0.000282"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:33.142786" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.142937" 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-25T23:58:33.140982" elapsed="0.001994"/>
</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-25T23:58:33.149990" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.150073" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:subscribe-ynl 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.150163" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:33.145195" elapsed="0.004994"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.143048" elapsed="0.007186"/>
</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-25T23:58:33.150454" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.150260" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.143030" elapsed="0.007546"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.155084" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.151995" elapsed="0.003150"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.151678" elapsed="0.003515"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.151653" elapsed="0.003575"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.158938" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.155716" elapsed="0.003307"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.155304" elapsed="0.003766"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.155281" elapsed="0.003824"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.159837" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.159323" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.160311" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.159992" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.161091" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.160640" elapsed="0.000488"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.160428" elapsed="0.000748"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.159946" elapsed="0.001259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.161957" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.161415" elapsed="0.000605"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.162421" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.162117" elapsed="0.000360"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.162939" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.162650" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.162501" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.162092" elapsed="0.000943"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.163174" elapsed="0.000334"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:33.163932" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.163662" elapsed="0.000310"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.164120" elapsed="0.002305"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.151079" elapsed="0.015407"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:33.166661" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:58:33.166557" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.166538" elapsed="0.000205"/>
</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-25T23:58:33.166920" elapsed="0.000026"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.167009" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.169156" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.138289" elapsed="0.030894"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.169282" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.169435" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:32.992804" elapsed="0.176655"/>
</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-25T23:58:33.169803" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.169560" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.169544" elapsed="0.000350"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.169926" elapsed="0.000025"/>
</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="PASS" start="2026-04-25T23:58:32.988456" elapsed="0.181608"/>
</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="PASS" start="2026-04-25T23:58:32.986301" elapsed="0.183824"/>
</kw>
<var name="${suffix}">60000</var>
<status status="PASS" start="2026-04-25T23:58:32.982419" elapsed="0.187739"/>
</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="PASS" start="2026-04-25T23:58:30.910767" elapsed="2.259423"/>
</for>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.170654" level="INFO">${count} = 12</msg>
<var>${count}</var>
<arg>${count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-25T23:58:33.170346" elapsed="0.000333"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.172281" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.171988" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:33.172351" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:33.172493" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:33.171641" elapsed="0.000876"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.173163" level="INFO">&amp;{mapping} = { ID=working-pair-1 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.172669" elapsed="0.000521"/>
</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-25T23:58:33.206952" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.206581" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.207814" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.207512" elapsed="0.000368">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.207994" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.207155" elapsed="0.000865"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.208561" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.208177" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.208875" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.209023" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:33.208742" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.209438" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.209197" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.210686" level="INFO">mapping: {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.210180" elapsed="0.000551"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.211316" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.210884" elapsed="0.000458"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.212394" 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-25T23:58:33.211717" elapsed="0.000718"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.214137" 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-25T23:58:33.213710" elapsed="0.000463"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.214251" elapsed="0.000078"/>
</return>
<msg time="2026-04-25T23:58:33.214596" 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-25T23:58:33.212883" elapsed="0.001753"/>
</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-25T23:58:33.214856" elapsed="0.000547"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:58:33.211557" elapsed="0.003946"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.216466" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.215775" elapsed="0.000731"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.218461" level="INFO">${encoded} = 300</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-25T23:58:33.218086" elapsed="0.000411"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.218575" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:33.218911" level="INFO">${encoded_value} = 300</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-25T23:58:33.216953" elapsed="0.001997"/>
</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-25T23:58:33.219186" elapsed="0.000516"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:33.215619" elapsed="0.004183"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.220755" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.220093" elapsed="0.000703"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.222535" level="INFO">${encoded} = 5000</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-25T23:58:33.222159" elapsed="0.000413"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.222649" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:33.223002" level="INFO">${encoded_value} = 5000</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-25T23:58:33.221264" elapsed="0.001779"/>
</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-25T23:58:33.223263" elapsed="0.000514"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:33.219919" elapsed="0.003958"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.211390" elapsed="0.012523"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.223970" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:33.224130" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.209850" elapsed="0.014305"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.209548" elapsed="0.014639"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.224353" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.224212" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.209529" elapsed="0.014901"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.225026" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.224566" elapsed="0.000488"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.225103" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.205981" elapsed="0.019244"/>
</kw>
<msg time="2026-04-25T23:58:33.225277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.193881" elapsed="0.031477"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.237747" elapsed="0.000038"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.249586" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.261322" 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-25T23:58:33.261519" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.261691" 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-25T23:58:33.262092" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.261935" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.261920" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.262309" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.262472" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.262634" elapsed="0.000029"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.261888" elapsed="0.000808"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.261783" elapsed="0.000940"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.262862" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.262938" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.263074" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:33.189776" elapsed="0.073325"/>
</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-25T23:58:33.286984" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.286587" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.287817" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.287500" elapsed="0.000388">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.288045" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.287172" elapsed="0.000899"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.288649" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:33.288259" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.288985" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.289132" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:33.288831" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.289555" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.289310" elapsed="0.000300"/>
</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-25T23:58:33.290004" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.289677" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.290524" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:33.290227" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.290089" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.289658" elapsed="0.000948"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.291345" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.290745" elapsed="0.000631"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.291424" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.285980" elapsed="0.005568"/>
</kw>
<msg time="2026-04-25T23:58:33.291601" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.273703" elapsed="0.017946"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.303522" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.315277" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.326998" 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-25T23:58:33.327222" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.327389" 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-25T23:58:33.327740" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.327603" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.327588" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.327951" elapsed="0.000035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.328129" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.328288" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.327561" elapsed="0.000782"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.327462" elapsed="0.000908"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.328509" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.328582" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.328727" 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;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.272811" elapsed="0.055950"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.330014" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.329766" elapsed="0.000312">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.330169" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.329423" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.330499" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.330262" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.331048" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.330746" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.330578" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.330243" elapsed="0.000888"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.333561" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.331280" elapsed="0.002307"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:33.333638" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.333824" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:33.329108" elapsed="0.004741"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.335367" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.335120" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.335797" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.335562" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.336246" 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-25T23:58:33.336005" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.336861" 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-25T23:58:33.336473" elapsed="0.000431"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:33.337713" 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-25T23:58:33.337520" elapsed="0.000219"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:33.338093" 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-25T23:58:33.337905" elapsed="0.000214"/>
</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-25T23:58:33.338262" elapsed="0.000206"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.338893" 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-25T23:58:33.338616" elapsed="0.000322"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:33.339001" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:33.339156" 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-25T23:58:33.337123" elapsed="0.002058"/>
</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-25T23:58:33.346582" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-1&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.346633" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.346731" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:33.341235" elapsed="0.005522"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.339251" elapsed="0.007551"/>
</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-25T23:58:33.346994" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.346828" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.339233" elapsed="0.007850"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.350389" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.348114" elapsed="0.002318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.347877" elapsed="0.002590"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.347859" elapsed="0.002634"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.353167" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.350767" elapsed="0.002448"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.350547" elapsed="0.002702"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.350531" elapsed="0.002743"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.353836" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.353433" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.354187" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.353933" elapsed="0.000311"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.354882" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.354468" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.354268" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.353915" elapsed="0.001106"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.355736" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.355235" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.356207" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.355869" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.356941" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.356534" elapsed="0.000463"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.356320" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.355844" elapsed="0.001231"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.357325" elapsed="0.000498"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:33.358448" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.358064" elapsed="0.000422"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.358692" elapsed="0.003258"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.347445" elapsed="0.014623"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:33.362326" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:58:33.362176" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.362150" elapsed="0.000265"/>
</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-25T23:58:33.362555" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.362622" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:33.364756" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.334186" elapsed="0.030598"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.364853" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.365022" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.179076" elapsed="0.185971"/>
</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-25T23:58:33.365393" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.365152" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.365134" elapsed="0.000373"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.365540" elapsed="0.000025"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:33.173439" elapsed="0.192242"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.171102" elapsed="0.194664"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:58:33.170903" elapsed="0.194902"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.367323" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.367012" elapsed="0.000338"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:33.367395" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.367540" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:33.366647" elapsed="0.000917"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.368234" level="INFO">&amp;{mapping} = { ID=working-pair-2 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.367719" elapsed="0.000543"/>
</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-25T23:58:33.400986" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.400597" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.401800" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.401495" elapsed="0.000410">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.402027" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.401172" elapsed="0.000881"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.402601" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.402219" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.402913" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.403062" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:33.402781" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.403479" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.403237" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.404677" level="INFO">mapping: {'ID': 'working-pair-2', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.404207" elapsed="0.000515"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.405303" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.404874" elapsed="0.000456"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.406433" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.405710" elapsed="0.000765"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.408230" level="INFO">${encoded} = working-pair-2</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-25T23:58:33.407751" elapsed="0.000523"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.408354" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:33.408698" level="INFO">${encoded_value} = working-pair-2</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-25T23:58:33.406927" elapsed="0.001812"/>
</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-25T23:58:33.408976" elapsed="0.000522"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:58:33.405548" elapsed="0.004069"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.410619" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.409927" elapsed="0.000733"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.412396" level="INFO">${encoded} = 300</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-25T23:58:33.411936" elapsed="0.000497"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.412511" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:33.412849" level="INFO">${encoded_value} = 300</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-25T23:58:33.411134" elapsed="0.001756"/>
</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-25T23:58:33.413125" elapsed="0.000514"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:33.409763" elapsed="0.003978"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.414914" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.414071" elapsed="0.000899"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.416699" level="INFO">${encoded} = 5000</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-25T23:58:33.416319" elapsed="0.000416"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.416813" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:33.417167" level="INFO">${encoded_value} = 5000</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-25T23:58:33.415436" elapsed="0.001772"/>
</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-25T23:58:33.417441" elapsed="0.000570"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:33.413892" elapsed="0.004221"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.405381" elapsed="0.012803"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.418231" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.418393" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.403877" elapsed="0.014542"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.403591" elapsed="0.014860"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.418620" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.418476" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.403572" elapsed="0.015125"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.419308" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.418834" elapsed="0.000505"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.419390" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.399989" elapsed="0.019524"/>
</kw>
<msg time="2026-04-25T23:58:33.419565" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.387887" elapsed="0.031727"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.431748" elapsed="0.000044"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.443687" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.455453" 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-25T23:58:33.455670" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.455848" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.456263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.456117" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.456099" elapsed="0.000245"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.456481" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.456641" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.456800" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.456058" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.455929" elapsed="0.000951"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.457034" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.457183" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:58:33.457327" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:33.383772" elapsed="0.073583"/>
</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-25T23:58:33.481130" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.480722" elapsed="0.000437"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.482027" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.481643" elapsed="0.000460">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.482199" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.481315" elapsed="0.000909"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.482767" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:33.482380" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.483105" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.483254" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:33.482948" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.483683" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.483439" elapsed="0.000293"/>
</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-25T23:58:33.484101" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.483798" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.484844" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:33.484326" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.484187" elapsed="0.000722"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.483779" elapsed="0.001152"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.485689" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.485090" elapsed="0.000631"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.485799" elapsed="0.000033"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.480084" elapsed="0.005845"/>
</kw>
<msg time="2026-04-25T23:58:33.486001" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.467996" elapsed="0.018054"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.497851" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.509569" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.521385" 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-25T23:58:33.521577" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.521746" elapsed="0.000045"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.522149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.522009" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.521993" 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-25T23:58:33.522361" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.522521" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.522679" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.521948" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.521847" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.522895" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.522984" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.523105" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.467094" elapsed="0.056040"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.524368" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.524127" elapsed="0.000307">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.524525" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.523775" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.524860" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.524617" elapsed="0.000335"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.525468" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.525174" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.524993" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.524599" elapsed="0.000953"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.527823" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.525698" elapsed="0.002151"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:33.527901" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.528071" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:33.523459" elapsed="0.004638"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.529599" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.529353" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.530073" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.529820" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.530511" 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-25T23:58:33.530265" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.530928" 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-25T23:58:33.530695" elapsed="0.000294"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:33.532017" 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-25T23:58:33.531804" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:33.532362" 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-25T23:58:33.532190" elapsed="0.000196"/>
</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-25T23:58:33.532527" elapsed="0.000212"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.533322" 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-25T23:58:33.532886" elapsed="0.000480"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:33.533409" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:33.533565" 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-25T23:58:33.531219" elapsed="0.002371"/>
</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-25T23:58:33.540262" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.540313" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.540407" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:33.535777" elapsed="0.004656"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.533659" elapsed="0.006819"/>
</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-25T23:58:33.540657" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.540504" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.533642" elapsed="0.007103"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.544072" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.541817" elapsed="0.002299"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.541580" elapsed="0.002571"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.541562" elapsed="0.002614"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.546714" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.544441" elapsed="0.002318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.544230" elapsed="0.002604"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.544214" elapsed="0.002649"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.547420" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.547041" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.547747" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.547518" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.548297" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.547999" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.547829" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.547499" elapsed="0.000883"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.548892" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.548534" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.549227" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.549003" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.549785" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.549461" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.549308" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.548985" elapsed="0.000885"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.550029" elapsed="0.000349"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:33.551010" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.550604" elapsed="0.000444"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.551272" elapsed="0.003272"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.541122" elapsed="0.013512"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:33.554881" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-25T23:58:33.554734" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.554708" elapsed="0.000315"/>
</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-25T23:58:33.555221" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.555315" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:58:33.558327" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.528416" elapsed="0.029949"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.558462" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:58:33.558674" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.372876" elapsed="0.185833"/>
</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-25T23:58:33.559196" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.558853" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.558829" elapsed="0.000497"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.559373" elapsed="0.000039"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:33.368513" elapsed="0.191033"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.366100" elapsed="0.193582"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:58:33.365890" elapsed="0.193849"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.561909" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.561427" elapsed="0.000520"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:33.562046" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:58:33.562254" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:33.560908" elapsed="0.001381"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.562985" level="INFO">&amp;{mapping} = { ID=working-pair-3 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.562458" elapsed="0.000556"/>
</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-25T23:58:33.595390" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.595020" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.596220" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.595895" elapsed="0.000392">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.596379" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.595574" elapsed="0.000829"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.596943" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.596559" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.597281" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.597419" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:33.597147" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.597850" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.597591" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.599049" level="INFO">mapping: {'ID': 'working-pair-3', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.598569" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.599658" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.599246" elapsed="0.000438"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.600725" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.600073" elapsed="0.000692"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.602495" level="INFO">${encoded} = working-pair-3</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-25T23:58:33.602110" elapsed="0.000421"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.602612" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:33.602953" level="INFO">${encoded_value} = working-pair-3</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-25T23:58:33.601228" elapsed="0.001783"/>
</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-25T23:58:33.603234" elapsed="0.000516"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:58:33.599898" elapsed="0.003951"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.604801" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.604139" elapsed="0.000702"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.606695" level="INFO">${encoded} = 300</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-25T23:58:33.606321" elapsed="0.000411"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.606811" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:33.607170" level="INFO">${encoded_value} = 300</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-25T23:58:33.605302" elapsed="0.001908"/>
</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-25T23:58:33.607431" elapsed="0.000510"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:33.603980" elapsed="0.004076"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.609004" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.608331" elapsed="0.000715"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.610796" level="INFO">${encoded} = 5000</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-25T23:58:33.610428" elapsed="0.000404"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.610909" elapsed="0.000088"/>
</return>
<msg time="2026-04-25T23:58:33.611257" level="INFO">${encoded_value} = 5000</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-25T23:58:33.609493" elapsed="0.001807"/>
</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-25T23:58:33.611519" elapsed="0.000552"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:33.608174" elapsed="0.004001"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.599732" elapsed="0.012480"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.612255" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.612415" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.598258" elapsed="0.014182"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.597974" elapsed="0.014498"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.612641" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.612497" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.597940" elapsed="0.014778"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.613330" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.612859" elapsed="0.000498"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.613405" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.594405" elapsed="0.019122"/>
</kw>
<msg time="2026-04-25T23:58:33.613579" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.582478" elapsed="0.031150"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.625841" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.637518" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.649147" 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-25T23:58:33.649373" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.649545" 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-25T23:58:33.650003" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.649841" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.649825" elapsed="0.000260"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.650222" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.650390" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.650552" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.649750" elapsed="0.000855"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.649621" elapsed="0.001009"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.650770" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.650845" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:33.650979" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:33.578383" elapsed="0.072624"/>
</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-25T23:58:33.674695" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.674319" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.675536" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.675223" elapsed="0.000383">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.675698" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.674879" elapsed="0.000843"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.676285" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:33.675879" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.676600" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.676745" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:33.676464" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.677182" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.676922" elapsed="0.000307"/>
</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-25T23:58:33.677581" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.677295" elapsed="0.000345"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.678134" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:33.677821" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.677665" elapsed="0.000565"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.677277" elapsed="0.000977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.678996" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.678396" elapsed="0.000632"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.679076" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.673672" elapsed="0.005528"/>
</kw>
<msg time="2026-04-25T23:58:33.679255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.661511" elapsed="0.017792"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.691059" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.702917" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.714614" 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-25T23:58:33.714802" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.714986" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.715339" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.715202" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.715188" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.715550" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.715711" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.715869" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.715160" elapsed="0.000762"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.715061" elapsed="0.000886"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.716099" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.716173" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:33.716289" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.660647" elapsed="0.055671"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.717568" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.717338" elapsed="0.000294">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.717723" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.717009" elapsed="0.000738"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.718103" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.717849" elapsed="0.000311"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.718636" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.718351" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.718184" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.717829" elapsed="0.000889"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.722228" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.718861" elapsed="0.003395"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:33.722308" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:33.722467" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:33.716676" elapsed="0.005816"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.724008" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.723746" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.724492" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.724252" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.724928" 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-25T23:58:33.724686" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.725384" 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-25T23:58:33.725141" elapsed="0.000287"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:33.726251" 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-25T23:58:33.726059" elapsed="0.000219"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:33.726597" 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-25T23:58:33.726425" elapsed="0.000198"/>
</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-25T23:58:33.726766" elapsed="0.000218"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.727381" 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-25T23:58:33.727134" elapsed="0.000291"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:33.727467" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:33.727621" 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-25T23:58:33.725621" elapsed="0.002025"/>
</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-25T23:58:33.733915" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.734017" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.734122" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:33.729711" elapsed="0.004438"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.727717" elapsed="0.006477"/>
</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-25T23:58:33.734388" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.734220" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.727699" elapsed="0.006812"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.739050" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.735907" elapsed="0.003205"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.735608" elapsed="0.003552"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.735582" elapsed="0.003614"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.742941" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.739570" elapsed="0.003457"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.739273" elapsed="0.003803"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.739250" elapsed="0.003862"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.743862" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.743333" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.744355" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.744025" elapsed="0.000412"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.745125" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.744688" elapsed="0.000475"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.744471" elapsed="0.000740"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.743997" elapsed="0.001244"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.746014" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.745455" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.746436" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.746150" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.746978" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.746670" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.746517" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.746125" elapsed="0.000937"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.747205" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:33.747993" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.747703" elapsed="0.000317"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.748168" elapsed="0.002289"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.735004" elapsed="0.015515"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:33.750697" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:58:33.750591" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.750572" elapsed="0.000209"/>
</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-25T23:58:33.750921" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.751005" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.753143" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.722810" elapsed="0.030360"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.753278" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.753433" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.567639" elapsed="0.185818"/>
</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-25T23:58:33.753803" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.753561" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.753543" elapsed="0.000354"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.753929" elapsed="0.000025"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:33.563264" elapsed="0.190803"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.560140" elapsed="0.193986"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:58:33.559859" elapsed="0.194306"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.755626" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.755328" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:33.755697" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.755843" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:33.754988" elapsed="0.000880"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.756524" level="INFO">&amp;{mapping} = { ID=working-pair-4 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.756039" elapsed="0.000512"/>
</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-25T23:58:33.789115" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.788707" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.789939" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.789625" elapsed="0.000403">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.790128" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.789302" elapsed="0.000851"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.790686" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.790309" elapsed="0.000404"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.791012" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.791145" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:33.790864" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.791674" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.791325" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.792870" level="INFO">mapping: {'ID': 'working-pair-4', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.792402" elapsed="0.000513"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.793498" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.793085" elapsed="0.000472"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.794646" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.793977" elapsed="0.000710"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.796348" level="INFO">${encoded} = working-pair-4</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-25T23:58:33.795952" elapsed="0.000433"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.796461" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:33.796795" level="INFO">${encoded_value} = working-pair-4</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-25T23:58:33.795162" elapsed="0.001673"/>
</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-25T23:58:33.797073" elapsed="0.000517"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:58:33.793800" elapsed="0.003891"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.798657" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.797997" elapsed="0.000700"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.800415" level="INFO">${encoded} = 300</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-25T23:58:33.800041" elapsed="0.000410"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.800528" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:33.800861" level="INFO">${encoded_value} = 300</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-25T23:58:33.799171" elapsed="0.001730"/>
</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-25T23:58:33.801138" elapsed="0.000520"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:33.797823" elapsed="0.003937"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.802917" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.802089" elapsed="0.000883"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.804671" level="INFO">${encoded} = 5000</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-25T23:58:33.804299" elapsed="0.000408"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.804784" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:33.805133" level="INFO">${encoded_value} = 5000</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-25T23:58:33.803430" elapsed="0.001743"/>
</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-25T23:58:33.805389" elapsed="0.000517"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:33.801914" elapsed="0.004106"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.793608" elapsed="0.012449"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.806099" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.806258" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.792084" elapsed="0.014198"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.791784" elapsed="0.014530"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.806480" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.806338" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.791765" elapsed="0.014790"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.807151" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.806688" elapsed="0.000491"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.807227" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.788095" elapsed="0.019253"/>
</kw>
<msg time="2026-04-25T23:58:33.807398" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.776007" elapsed="0.031438"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.819603" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.831495" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.843175" 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-25T23:58:33.843364" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.843533" 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-25T23:58:33.843883" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.843745" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.843731" elapsed="0.000244"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.844111" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.844271" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.844429" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.843704" elapsed="0.000778"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.843606" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.844644" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.844717" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:33.844825" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:33.771879" elapsed="0.072972"/>
</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-25T23:58:33.868778" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.868380" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.869630" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:33.869310" elapsed="0.000391">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.869821" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.868982" elapsed="0.000865"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.870471" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:33.870077" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.870787" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.870927" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:33.870652" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.871378" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.871130" elapsed="0.000296"/>
</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-25T23:58:33.871807" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.871498" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.872558" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:33.872048" elapsed="0.000538"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.871893" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.871476" elapsed="0.001170"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.873391" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.872788" elapsed="0.000634"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.873473" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.867694" elapsed="0.005906"/>
</kw>
<msg time="2026-04-25T23:58:33.873655" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.855361" elapsed="0.018343"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.885473" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.897201" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.908988" 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-25T23:58:33.909181" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.909384" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.909743" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.909605" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:33.909590" elapsed="0.000249"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.909990" 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-25T23:58:33.910156" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.910316" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:33.909562" elapsed="0.000807"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.909460" elapsed="0.000935"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.910534" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.910609" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:33.910727" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:33.854516" elapsed="0.056240"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.911987" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.911741" elapsed="0.000310">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.912143" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.911414" elapsed="0.000753"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.912486" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.912236" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.913053" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.912731" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.912567" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.912218" elapsed="0.000917"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.915395" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.913278" elapsed="0.002143"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:33.915471" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.915621" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:33.911097" elapsed="0.004548"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.917144" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.916883" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.917702" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.917334" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.918163" 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-25T23:58:33.917907" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.918584" 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-25T23:58:33.918349" elapsed="0.000277"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:33.919462" 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-25T23:58:33.919270" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:33.919808" 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-25T23:58:33.919636" elapsed="0.000197"/>
</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-25T23:58:33.919990" elapsed="0.000200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.920758" 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-25T23:58:33.920344" elapsed="0.000458"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:33.920845" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:33.921016" 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-25T23:58:33.918858" elapsed="0.002184"/>
</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-25T23:58:33.927090" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.927149" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.927237" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:33.923124" elapsed="0.004139"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.921113" elapsed="0.006196"/>
</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-25T23:58:33.927482" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.927335" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.921095" elapsed="0.006475"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.931068" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.928584" elapsed="0.002546"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.928370" elapsed="0.002809"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.928349" elapsed="0.002866"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.934753" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.931587" elapsed="0.003278"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.931291" elapsed="0.003633"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.931268" elapsed="0.003715"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.935721" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.935207" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.936195" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.935855" elapsed="0.000420"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.936946" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.936524" elapsed="0.000479"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.936309" elapsed="0.000743"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.935829" elapsed="0.001253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.937826" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.937296" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.938301" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.937982" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.938849" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.938558" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.938396" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.937937" elapsed="0.000993"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.939089" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:33.939901" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.939622" elapsed="0.000305"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.940092" elapsed="0.002278"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.927918" elapsed="0.014516"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:33.942611" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:33.942506" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.942487" elapsed="0.000208"/>
</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-25T23:58:33.942836" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:33.942903" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:33.945064" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.915971" elapsed="0.029119"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.945160" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:33.945309" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.761014" elapsed="0.184320"/>
</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-25T23:58:33.945666" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.945436" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.945419" elapsed="0.000340"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.945807" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:33.756798" elapsed="0.189139"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.754430" elapsed="0.191585"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:58:33.754249" elapsed="0.191806"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.947526" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.947222" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:33.947598" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:33.947745" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:33.946868" elapsed="0.000902"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.948424" level="INFO">&amp;{mapping} = { ID=working-pair-5 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.947925" elapsed="0.000526"/>
</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-25T23:58:33.980753" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:33.980382" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.981560" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.981275" elapsed="0.000350">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:33.981757" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:33.980937" elapsed="0.000845"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.982380" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:33.981989" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:33.982693" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:33.982818" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:33.982560" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.983254" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.983009" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.984445" level="INFO">mapping: {'ID': 'working-pair-5', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:33.983975" elapsed="0.000516"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.985072" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:33.984644" elapsed="0.000455"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.986176" level="INFO">${value} = working-pair-5</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.985476" elapsed="0.000742"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.987857" level="INFO">${encoded} = working-pair-5</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-25T23:58:33.987481" elapsed="0.000412"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.987986" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:33.988325" level="INFO">${encoded_value} = working-pair-5</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-25T23:58:33.986659" elapsed="0.001707"/>
</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-25T23:58:33.988594" elapsed="0.000530"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-5</var>
<status status="PASS" start="2026-04-25T23:58:33.985316" elapsed="0.003908"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.990256" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.989498" elapsed="0.000805"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.992275" level="INFO">${encoded} = 300</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-25T23:58:33.991799" elapsed="0.000512"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.992387" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:33.992716" level="INFO">${encoded_value} = 300</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-25T23:58:33.990768" elapsed="0.001987"/>
</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-25T23:58:33.992986" elapsed="0.000507"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:33.989341" elapsed="0.004248"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.994539" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:33.993874" elapsed="0.000706"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:33.996299" level="INFO">${encoded} = 5000</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-25T23:58:33.995824" elapsed="0.000510"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:33.996408" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:33.996740" level="INFO">${encoded_value} = 5000</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-25T23:58:33.995035" elapsed="0.001744"/>
</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-25T23:58:33.997009" elapsed="0.000501"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:33.993705" elapsed="0.003902"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.985147" elapsed="0.012496"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:33.997686" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:33.997894" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:33.983647" elapsed="0.014273"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:33.983364" elapsed="0.014588"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:33.998137" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:33.997994" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:33.983345" elapsed="0.014868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.998787" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:33.998347" elapsed="0.000467"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:33.998862" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:33.979766" elapsed="0.019232"/>
</kw>
<msg time="2026-04-25T23:58:33.999052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:33.967818" elapsed="0.031290"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.011123" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.022744" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.034419" 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-25T23:58:34.034616" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.034784" 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-25T23:58:34.035158" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.035020" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.035005" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.035367" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.035526" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.035682" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.034975" elapsed="0.000760"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.034864" elapsed="0.000895"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.035894" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.036022" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:58:34.036137" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:33.963754" elapsed="0.072408"/>
</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-25T23:58:34.059878" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.059502" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.060689" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.060403" elapsed="0.000351">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.060847" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.060077" elapsed="0.000794"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.061429" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:34.061049" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.061742" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.061890" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:34.061609" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.062324" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.062083" elapsed="0.000288"/>
</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-25T23:58:34.062719" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.062436" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.063249" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:34.062940" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.062802" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.062418" elapsed="0.000914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.064055" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.063468" elapsed="0.000616"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.064133" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.058888" elapsed="0.005368"/>
</kw>
<msg time="2026-04-25T23:58:34.064310" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.046724" elapsed="0.017635"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.076923" elapsed="0.000081"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.089162" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.100755" 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-25T23:58:34.100979" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.101152" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.101536" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.101393" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.101377" elapsed="0.000241"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.101753" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.101942" elapsed="0.000035"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.102123" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.101342" elapsed="0.000833"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.101233" elapsed="0.000968"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.102342" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.102417" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:34.102561" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.045881" elapsed="0.056710"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.103891" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.103626" elapsed="0.000353">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.104073" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.103263" elapsed="0.000834"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.104418" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.104166" elapsed="0.000307"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.105016" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.104701" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.104528" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.104148" elapsed="0.000951"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.107552" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.105244" elapsed="0.002334"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:34.107629" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:34.107783" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:34.102914" elapsed="0.004894"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.109322" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.109067" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.109750" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.109514" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.110218" 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-25T23:58:34.109973" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.110643" 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-25T23:58:34.110405" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:34.111478" 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-25T23:58:34.111289" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:34.111824" 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-25T23:58:34.111653" elapsed="0.000197"/>
</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-25T23:58:34.112088" elapsed="0.000207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.112695" 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-25T23:58:34.112451" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:34.112781" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.112932" 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-25T23:58:34.110878" elapsed="0.002094"/>
</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-25T23:58:34.119191" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.119241" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.119329" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:34.115089" elapsed="0.004266"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.113045" elapsed="0.006355"/>
</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-25T23:58:34.119572" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.119425" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.113027" elapsed="0.006632"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.123337" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.120658" elapsed="0.002740"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.120445" elapsed="0.003002"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.120427" elapsed="0.003055"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.127053" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.123853" elapsed="0.003265"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.123558" elapsed="0.003608"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.123536" elapsed="0.003665"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.128011" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.127422" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.128472" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.128148" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.129237" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.128800" elapsed="0.000473"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.128585" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.128123" elapsed="0.001232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.130124" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.129571" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.130508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.130256" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.131047" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.130740" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.130588" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.130232" elapsed="0.000897"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.131273" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:34.132066" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.131775" elapsed="0.000317"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.132240" elapsed="0.002287"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.120017" elapsed="0.014572"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:34.134766" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:34.134661" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.134642" elapsed="0.000208"/>
</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-25T23:58:34.135008" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.135077" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.137211" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.108141" elapsed="0.029097"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.137308" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.137459" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:33.953149" elapsed="0.184335"/>
</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-25T23:58:34.137830" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.137585" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.137568" elapsed="0.000357"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.137972" elapsed="0.000028"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:33.948704" elapsed="0.189394"/>
</kw>
<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="PASS" start="2026-04-25T23:58:33.946324" elapsed="0.191834"/>
</kw>
<var name="${index}">5</var>
<status status="PASS" start="2026-04-25T23:58:33.946141" elapsed="0.192090"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.139705" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.139409" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:34.139778" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:58:34.139932" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:34.139070" elapsed="0.000900"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.140611" level="INFO">&amp;{mapping} = { ID=working-pair-6 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.140130" elapsed="0.000509"/>
</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-25T23:58:34.172992" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.172606" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.173796" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.173502" elapsed="0.000383">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.173998" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.173180" elapsed="0.000844"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.174567" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.174187" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.174881" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.175030" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:34.174748" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.175450" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.175204" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.176633" level="INFO">mapping: {'ID': 'working-pair-6', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.176171" elapsed="0.000509"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.177263" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.176832" elapsed="0.000458"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.178362" level="INFO">${value} = working-pair-6</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.177668" elapsed="0.000735"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.180059" level="INFO">${encoded} = working-pair-6</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-25T23:58:34.179668" elapsed="0.000427"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.180173" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:34.180523" level="INFO">${encoded_value} = working-pair-6</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-25T23:58:34.178845" elapsed="0.001717"/>
</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-25T23:58:34.180782" elapsed="0.000530"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-6</var>
<status status="PASS" start="2026-04-25T23:58:34.177509" elapsed="0.003902"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.182384" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.181682" elapsed="0.000743"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.184141" level="INFO">${encoded} = 300</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-25T23:58:34.183675" elapsed="0.000503"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.184293" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:34.184630" level="INFO">${encoded_value} = 300</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-25T23:58:34.182864" elapsed="0.001806"/>
</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-25T23:58:34.184888" elapsed="0.000521"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:34.181526" elapsed="0.003981"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.187592" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.185778" elapsed="0.001856"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.189354" level="INFO">${encoded} = 5000</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-25T23:58:34.188979" elapsed="0.000415"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.189473" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:34.189843" level="INFO">${encoded_value} = 5000</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-25T23:58:34.188168" elapsed="0.001718"/>
</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-25T23:58:34.190121" elapsed="0.000519"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:34.185623" elapsed="0.005116"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.177338" elapsed="0.013437"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.190818" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.190991" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:34.175842" elapsed="0.015176"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.175560" elapsed="0.015489"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.191225" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.191078" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.175541" elapsed="0.015760"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.191891" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.191438" elapsed="0.000480"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.192076" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.171997" elapsed="0.020206"/>
</kw>
<msg time="2026-04-25T23:58:34.192255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.160027" elapsed="0.032277"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.204302" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.216068" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.227770" 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-25T23:58:34.228006" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.228178" 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-25T23:58:34.228532" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.228392" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.228376" 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-25T23:58:34.228747" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.228909" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.229086" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.228348" elapsed="0.000792"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.228251" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.229305" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.229379" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:34.229489" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:34.155927" elapsed="0.073588"/>
</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-25T23:58:34.253247" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.252857" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.254079" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.253755" elapsed="0.000397">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.254245" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.253433" elapsed="0.000844"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.254816" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:34.254436" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.255146" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.255271" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:34.255013" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.255690" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.255448" elapsed="0.000290"/>
</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-25T23:58:34.256106" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.255805" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.256621" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:34.256330" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.256191" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.255786" elapsed="0.000954"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.257679" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.256882" elapsed="0.000828"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.257760" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.252250" elapsed="0.005698"/>
</kw>
<msg time="2026-04-25T23:58:34.258019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.240076" elapsed="0.017998"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.269789" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.281580" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.293308" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.293501" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.293670" 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-25T23:58:34.294080" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.293923" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.293907" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.294295" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.294458" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.294618" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.293877" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.293745" elapsed="0.000952"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.294835" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.294910" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:34.295050" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.239222" elapsed="0.055859"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.296410" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.296165" elapsed="0.000312">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.296569" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.295797" elapsed="0.000797"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.296907" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.296664" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.297468" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.297177" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.297005" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.296646" elapsed="0.000904"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.299820" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.297694" elapsed="0.002152"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:34.299898" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.300065" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:34.295471" elapsed="0.004619"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.301599" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.301352" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.302081" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.301793" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.302519" 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-25T23:58:34.302276" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.302944" 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-25T23:58:34.302707" elapsed="0.000301"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:34.303797" 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-25T23:58:34.303607" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:34.304159" 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-25T23:58:34.303984" elapsed="0.000201"/>
</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-25T23:58:34.304328" elapsed="0.000200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.304930" 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-25T23:58:34.304677" elapsed="0.000314"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:34.305037" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:34.305192" 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-25T23:58:34.303212" elapsed="0.002006"/>
</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-25T23:58:34.311683" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.311768" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.311869" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:34.307528" elapsed="0.004367"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.305288" elapsed="0.006653"/>
</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-25T23:58:34.312140" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.311989" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.305271" elapsed="0.006958"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.315493" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.313250" elapsed="0.002286"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.313035" elapsed="0.002536"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.313017" elapsed="0.002580"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.318159" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.315864" elapsed="0.002341"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.315652" elapsed="0.002587"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.315635" elapsed="0.002629"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.318793" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.318420" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.319133" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.318889" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.319667" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.319369" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.319215" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.318871" elapsed="0.000879"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.320285" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.319901" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.320606" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.320381" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.321150" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.320840" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.320686" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.320363" elapsed="0.000869"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.321375" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:34.322190" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.321896" elapsed="0.000320"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.322364" elapsed="0.002275"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.312584" elapsed="0.012118"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:34.324880" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:34.324773" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.324755" elapsed="0.000226"/>
</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-25T23:58:34.325124" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.325191" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:34.327342" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.300414" elapsed="0.026955"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.327476" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.327629" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.145103" elapsed="0.182551"/>
</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-25T23:58:34.328004" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.327757" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.327739" elapsed="0.000360"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.328132" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:34.140886" elapsed="0.187374"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.138504" elapsed="0.189817"/>
</kw>
<var name="${index}">6</var>
<status status="PASS" start="2026-04-25T23:58:34.138318" elapsed="0.190044"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.329867" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.329540" elapsed="0.000356"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:34.329940" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T23:58:34.330104" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:34.329191" elapsed="0.000938"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.330767" level="INFO">&amp;{mapping} = { ID=working-pair-7 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.330285" elapsed="0.000509"/>
</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-25T23:58:34.363405" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.363025" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.364220" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.363911" elapsed="0.000374">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.364376" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.363589" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.364948" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.364565" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.365289" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.365425" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:34.365154" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.365872" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.365601" elapsed="0.000324"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.367103" level="INFO">mapping: {'ID': 'working-pair-7', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.366620" elapsed="0.000528"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.367712" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.367303" elapsed="0.000472"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.368834" level="INFO">${value} = working-pair-7</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.368176" elapsed="0.000699"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.370567" level="INFO">${encoded} = working-pair-7</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-25T23:58:34.370187" elapsed="0.000416"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.370681" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:34.371034" level="INFO">${encoded_value} = working-pair-7</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-25T23:58:34.369342" 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-25T23:58:34.371295" elapsed="0.000512"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-7</var>
<status status="PASS" start="2026-04-25T23:58:34.368011" elapsed="0.003894"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.372855" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.372199" elapsed="0.000697"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.374755" level="INFO">${encoded} = 300</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-25T23:58:34.374377" elapsed="0.000415"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.374871" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:34.375229" level="INFO">${encoded_value} = 300</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-25T23:58:34.373370" elapsed="0.001899"/>
</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-25T23:58:34.375488" elapsed="0.000526"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:34.372039" elapsed="0.004075"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.377066" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.376392" elapsed="0.000715"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.378856" level="INFO">${encoded} = 5000</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-25T23:58:34.378488" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.378982" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:34.379316" level="INFO">${encoded_value} = 5000</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-25T23:58:34.377551" elapsed="0.001807"/>
</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-25T23:58:34.379581" elapsed="0.000522"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:34.376231" elapsed="0.003970"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.367824" elapsed="0.012414"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.380280" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.380443" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:34.366295" elapsed="0.014173"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.366008" elapsed="0.014492"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.380668" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.380525" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.365988" elapsed="0.014757"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.381343" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.380882" elapsed="0.000489"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.381419" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.362407" elapsed="0.019132"/>
</kw>
<msg time="2026-04-25T23:58:34.381591" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.350301" elapsed="0.031338"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.393708" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.405454" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.418598" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.418793" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.418975" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.419344" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.419196" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.419181" elapsed="0.000243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.419558" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.419718" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.419877" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.419152" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.419051" elapsed="0.000902"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.420107" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.420182" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.420293" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:34.346179" elapsed="0.074139"/>
</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-25T23:58:34.444229" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.443830" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.445085" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.444740" elapsed="0.000417">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.445262" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.444415" elapsed="0.000880"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.446017" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:34.445557" elapsed="0.000488"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.446339" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.446489" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:34.446201" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.446906" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.446665" elapsed="0.000288"/>
</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-25T23:58:34.447327" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.447040" elapsed="0.000346"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.447841" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:34.447549" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.447411" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.447020" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.448666" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.448076" elapsed="0.000620"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.448745" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.443219" elapsed="0.005651"/>
</kw>
<msg time="2026-04-25T23:58:34.448924" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.430776" elapsed="0.018211"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.460658" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.472436" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.484343" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.484544" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.484758" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.485149" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.485008" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.484992" elapsed="0.000236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.485362" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.485521" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.485680" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.484945" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.484836" elapsed="0.000923"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.485922" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.486014" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:34.486141" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.429932" elapsed="0.056238"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.487457" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.487210" elapsed="0.000316">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.487617" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.486840" elapsed="0.000802"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.487972" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.487712" elapsed="0.000319"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.488524" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.488231" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.488055" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.487694" elapsed="0.000910"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.491097" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.488746" elapsed="0.002378"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:34.491175" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:34.491329" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:34.486513" elapsed="0.004841"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.492845" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.492601" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.493284" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.493050" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.493710" 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-25T23:58:34.493473" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.494161" 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-25T23:58:34.493907" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:34.495059" 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-25T23:58:34.494846" elapsed="0.000240"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:34.495407" 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-25T23:58:34.495233" elapsed="0.000199"/>
</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-25T23:58:34.495573" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.496181" 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-25T23:58:34.495925" elapsed="0.000299"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:34.496266" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.496419" 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-25T23:58:34.494448" elapsed="0.001996"/>
</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-25T23:58:34.502774" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.502825" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.502913" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:34.498504" elapsed="0.004434"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.496513" elapsed="0.006492"/>
</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-25T23:58:34.503183" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.503031" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.496496" elapsed="0.006775"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.506654" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.504286" elapsed="0.002412"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.504068" elapsed="0.002666"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.504050" elapsed="0.002710"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.509297" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.507043" elapsed="0.002300"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.506814" elapsed="0.002563"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.506798" elapsed="0.002604"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.509975" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.509559" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.510301" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.510073" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.510828" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.510534" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.510381" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.510055" elapsed="0.000856"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.511433" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.511076" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.511751" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.511527" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.512293" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.512000" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.511832" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.511509" elapsed="0.000867"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.512518" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:34.513344" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.513067" elapsed="0.000304"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.513520" elapsed="0.002279"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.503624" elapsed="0.012238"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:34.516057" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:34.515935" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.515917" elapsed="0.000225"/>
</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-25T23:58:34.516283" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.516352" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.518502" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.491672" elapsed="0.026857"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.518598" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.518750" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.335473" elapsed="0.183302"/>
</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-25T23:58:34.519124" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.518878" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.518861" elapsed="0.000356"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.519250" elapsed="0.000025"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:34.331057" elapsed="0.188316"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.328630" elapsed="0.190806"/>
</kw>
<var name="${index}">7</var>
<status status="PASS" start="2026-04-25T23:58:34.328447" elapsed="0.191029"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.520940" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.520645" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:34.521029" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.521174" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:34.520301" elapsed="0.000897"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.521833" level="INFO">&amp;{mapping} = { ID=working-pair-8 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.521351" elapsed="0.000537"/>
</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-25T23:58:34.554198" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.553779" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.555020" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.554698" elapsed="0.000388">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.555226" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.554380" elapsed="0.000870"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.555786" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.555409" elapsed="0.000404"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.556117" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.556256" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:34.555980" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.556679" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.556434" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.557873" level="INFO">mapping: {'ID': 'working-pair-8', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.557397" elapsed="0.000523"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.558497" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.558087" elapsed="0.000435"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.559573" level="INFO">${value} = working-pair-8</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.558894" elapsed="0.000720"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.561264" level="INFO">${encoded} = working-pair-8</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-25T23:58:34.560870" elapsed="0.000431"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.561378" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:34.561711" level="INFO">${encoded_value} = working-pair-8</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-25T23:58:34.560081" elapsed="0.001670"/>
</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-25T23:58:34.562023" elapsed="0.000523"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-8</var>
<status status="PASS" start="2026-04-25T23:58:34.558734" elapsed="0.003913"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.563635" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.562929" elapsed="0.000747"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.565382" level="INFO">${encoded} = 300</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-25T23:58:34.565009" elapsed="0.000410"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.565498" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:34.565842" level="INFO">${encoded_value} = 300</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-25T23:58:34.564174" elapsed="0.001723"/>
</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-25T23:58:34.566136" elapsed="0.000519"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:34.562772" elapsed="0.003984"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.568065" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.567112" elapsed="0.000995"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.569742" level="INFO">${encoded} = 5000</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-25T23:58:34.569371" elapsed="0.000406"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.569853" elapsed="0.000120"/>
</return>
<msg time="2026-04-25T23:58:34.570252" level="INFO">${encoded_value} = 5000</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-25T23:58:34.568553" elapsed="0.001738"/>
</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-25T23:58:34.570511" elapsed="0.000595"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:34.566872" elapsed="0.004333"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.558569" elapsed="0.012684"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.571298" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:34.571489" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:34.557085" elapsed="0.014429"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.556788" elapsed="0.014758"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.571715" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.571571" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.556770" elapsed="0.015021"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.572381" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.571926" elapsed="0.000482"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.572457" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.553183" elapsed="0.019394"/>
</kw>
<msg time="2026-04-25T23:58:34.572628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.541282" elapsed="0.031394"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.584635" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.596279" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.607976" 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-25T23:58:34.608164" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.608332" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.608678" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.608542" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.608527" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.608888" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.609066" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.609226" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.608500" elapsed="0.000779"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.608404" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.609440" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.609545" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:34.609657" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:34.537208" elapsed="0.072474"/>
</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-25T23:58:34.632923" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.632556" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.633725" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.633442" elapsed="0.000346">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.633908" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.633121" elapsed="0.000813"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.634498" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:34.634119" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.634816" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.634939" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:34.634678" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.635376" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.635134" elapsed="0.000290"/>
</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-25T23:58:34.635769" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.635490" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.636477" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:34.636006" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.635852" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.635471" elapsed="0.001092"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.637290" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.636703" elapsed="0.000618"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.637370" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.631949" elapsed="0.005544"/>
</kw>
<msg time="2026-04-25T23:58:34.637546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.620073" elapsed="0.017519"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.649282" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.660969" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.672622" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.672807" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.672989" 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-25T23:58:34.673422" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.673273" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.673257" elapsed="0.000244"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.673634" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.673796" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.674001" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.673163" elapsed="0.000899"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.673063" elapsed="0.001026"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.674228" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.674303" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.674420" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.619225" elapsed="0.055223"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.675655" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.675425" elapsed="0.000292">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.675807" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.675097" elapsed="0.000733"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.676151" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.675899" elapsed="0.000308"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.676713" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.676421" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.676262" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.675881" elapsed="0.000914"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.679213" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.676940" elapsed="0.002304"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:34.679301" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:34.679462" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:34.674768" elapsed="0.004719"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.681010" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.680737" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.681435" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.681201" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.681860" 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-25T23:58:34.681624" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.682326" 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-25T23:58:34.682091" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:34.683161" 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-25T23:58:34.682974" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:34.683500" 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-25T23:58:34.683331" elapsed="0.000193"/>
</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-25T23:58:34.683666" elapsed="0.000201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.684440" 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-25T23:58:34.684030" elapsed="0.000454"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:34.684528" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.684682" 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-25T23:58:34.682569" elapsed="0.002137"/>
</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-25T23:58:34.690811" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.690867" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.690984" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:34.686776" elapsed="0.004236"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.684776" elapsed="0.006290"/>
</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-25T23:58:34.691259" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.691098" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.684759" elapsed="0.006590"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.694668" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.692406" elapsed="0.002306"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.692179" elapsed="0.002568"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.692160" elapsed="0.002613"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.697287" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.695051" elapsed="0.002282"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.694826" elapsed="0.002543"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.694810" elapsed="0.002587"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.698040" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.697558" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.698369" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.698139" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.698907" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.698609" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.698451" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.698121" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.699517" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.699160" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.699836" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.699613" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.700379" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.700086" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.699918" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.699595" elapsed="0.000866"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.700604" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:34.701401" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.701118" elapsed="0.000309"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.701574" elapsed="0.002285"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.691715" elapsed="0.012208"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:34.704120" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-25T23:58:34.704012" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.703993" elapsed="0.000214"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.704348" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.704416" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.706563" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.679815" elapsed="0.026774"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.706658" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:34.706807" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.526460" elapsed="0.180371"/>
</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-25T23:58:34.707179" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.706931" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.706914" elapsed="0.000357"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.707303" elapsed="0.000025"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:34.522153" elapsed="0.185269"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.519745" elapsed="0.187744"/>
</kw>
<var name="${index}">8</var>
<status status="PASS" start="2026-04-25T23:58:34.519563" elapsed="0.188000"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.709036" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.708727" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:34.709107" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.709251" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:34.708393" elapsed="0.000882"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.709946" level="INFO">&amp;{mapping} = { ID=working-pair-9 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.709436" elapsed="0.000552"/>
</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-25T23:58:34.743248" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.742854" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.744099" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.743755" elapsed="0.000415">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.744264" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.743433" elapsed="0.000855"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.744826" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.744445" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.745168" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.745306" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:34.745023" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.745726" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.745485" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.746985" level="INFO">mapping: {'ID': 'working-pair-9', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.746495" elapsed="0.000539"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.747606" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.747196" elapsed="0.000436"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.748679" level="INFO">${value} = working-pair-9</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.748023" elapsed="0.000698"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.750383" level="INFO">${encoded} = working-pair-9</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-25T23:58:34.750008" elapsed="0.000411"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.750497" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:34.750833" level="INFO">${encoded_value} = working-pair-9</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-25T23:58:34.749183" elapsed="0.001690"/>
</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-25T23:58:34.751112" elapsed="0.000516"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-9</var>
<status status="PASS" start="2026-04-25T23:58:34.747848" elapsed="0.003880"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.752681" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.752028" elapsed="0.000694"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.754693" level="INFO">${encoded} = 300</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-25T23:58:34.754170" elapsed="0.000560"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.754844" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:34.755203" level="INFO">${encoded_value} = 300</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-25T23:58:34.753184" elapsed="0.002060"/>
</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-25T23:58:34.755464" elapsed="0.000576"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:34.751843" elapsed="0.004297"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.757081" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.756416" elapsed="0.000706"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.758758" level="INFO">${encoded} = 5000</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-25T23:58:34.758391" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.758871" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:34.759230" level="INFO">${encoded_value} = 5000</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-25T23:58:34.757562" elapsed="0.001707"/>
</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-25T23:58:34.759489" elapsed="0.000646"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:34.756257" elapsed="0.003977"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.747681" elapsed="0.012590"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.760314" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.760472" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:34.746180" elapsed="0.014317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.745836" elapsed="0.014693"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.760696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.760554" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.745817" elapsed="0.014956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.761380" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.760908" elapsed="0.000500"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.761458" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.742250" elapsed="0.019332"/>
</kw>
<msg time="2026-04-25T23:58:34.761634" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.730300" elapsed="0.031383"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.773601" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.785448" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.797262" 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-25T23:58:34.797483" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.797653" 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-25T23:58:34.798039" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.797869" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.797854" elapsed="0.000266"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.798256" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.798419" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.798581" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.797826" elapsed="0.000809"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.797726" elapsed="0.000935"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.798800" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.798875" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.798999" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:34.726223" elapsed="0.072804"/>
</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-25T23:58:34.822775" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.822400" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.823597" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:34.823311" elapsed="0.000350">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.823753" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.822978" elapsed="0.000799"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.824336" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:34.823933" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.824651" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.824777" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:34.824519" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.825207" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.824951" elapsed="0.000303"/>
</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-25T23:58:34.825601" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.825319" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.826163" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:34.825820" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.825683" elapsed="0.000573"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.825301" elapsed="0.000979"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.827007" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.826420" elapsed="0.000618"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.827086" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.821761" elapsed="0.005448"/>
</kw>
<msg time="2026-04-25T23:58:34.827262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.809522" elapsed="0.017787"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.839008" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.850710" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.862403" 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-25T23:58:34.862589" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.862756" 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-25T23:58:34.863122" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.862982" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.862953" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.863334" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.863495" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.863652" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.862926" elapsed="0.000779"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.862828" elapsed="0.000902"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.863868" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.863942" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.864074" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.808668" elapsed="0.055435"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.865355" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.865123" elapsed="0.000300">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.865513" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.864779" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.865852" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.865606" elapsed="0.000335"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.866427" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.866140" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.865980" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.865588" elapsed="0.000921"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.868902" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.866653" elapsed="0.002275"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:34.868992" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.869145" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:34.864462" elapsed="0.004707"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.870686" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.870440" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.871136" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.870878" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.871576" 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-25T23:58:34.871329" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.872018" 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-25T23:58:34.871766" elapsed="0.000296"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:34.872834" 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-25T23:58:34.872647" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:34.873192" 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-25T23:58:34.873020" elapsed="0.000197"/>
</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-25T23:58:34.873357" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.873950" 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-25T23:58:34.873697" elapsed="0.000312"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:34.874051" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.874203" 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-25T23:58:34.872254" elapsed="0.001973"/>
</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-25T23:58:34.880685" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '194', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.880767" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.880866" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:34.876285" elapsed="0.004607"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.874296" elapsed="0.006642"/>
</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-25T23:58:34.881135" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.880984" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.874279" elapsed="0.006944"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.884462" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.882248" elapsed="0.002257"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.882029" elapsed="0.002511"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.882010" elapsed="0.002556"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.887281" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.884831" elapsed="0.002497"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.884620" elapsed="0.002744"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.884604" elapsed="0.002785"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.887913" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.887544" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.888255" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.888026" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.888785" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.888491" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.888338" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.888007" elapsed="0.000861"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.889405" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.889039" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.889725" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.889501" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.890283" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.889992" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.889811" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.889483" elapsed="0.000883"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.890509" elapsed="0.000339"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:34.891294" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.891020" elapsed="0.000300"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.891470" elapsed="0.002270"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.881567" elapsed="0.012236"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:34.894024" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:34.893875" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.893856" elapsed="0.000253"/>
</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-25T23:58:34.894251" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.894318" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.896464" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.869480" elapsed="0.027011"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.896593" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:34.896746" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.715616" elapsed="0.181155"/>
</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-25T23:58:34.897121" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.896874" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.896857" elapsed="0.000357"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.897248" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:34.710238" elapsed="0.187140"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.707838" elapsed="0.189600"/>
</kw>
<var name="${index}">9</var>
<status status="PASS" start="2026-04-25T23:58:34.707653" elapsed="0.189824"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.899063" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.898724" elapsed="0.000368"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:34.899137" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:34.899285" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:34.898374" elapsed="0.000936"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.899952" level="INFO">&amp;{mapping} = { ID=working-pair-10 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.899471" elapsed="0.000524"/>
</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-25T23:58:34.932486" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:34.932116" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.933323" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.933005" elapsed="0.000388">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:34.933484" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:34.932669" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.934078" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:34.933664" elapsed="0.000447"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:34.934402" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:34.934543" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:34.934263" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.934974" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.934718" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.936165" level="INFO">mapping: {'ID': 'working-pair-10', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:34.935684" elapsed="0.000526"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.936766" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:34.936362" elapsed="0.000473"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.937910" level="INFO">${value} = working-pair-10</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.937254" elapsed="0.000742"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.939638" level="INFO">${encoded} = working-pair-10</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-25T23:58:34.939256" elapsed="0.000418"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.939749" elapsed="0.000082"/>
</return>
<msg time="2026-04-25T23:58:34.940113" level="INFO">${encoded_value} = working-pair-10</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-25T23:58:34.938449" elapsed="0.001704"/>
</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-25T23:58:34.940372" elapsed="0.000531"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-10</var>
<status status="PASS" start="2026-04-25T23:58:34.937091" elapsed="0.003929"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.941972" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.941292" elapsed="0.000723"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.943651" level="INFO">${encoded} = 300</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-25T23:58:34.943283" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.943762" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:34.944113" level="INFO">${encoded_value} = 300</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-25T23:58:34.942477" elapsed="0.001676"/>
</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-25T23:58:34.944369" elapsed="0.000506"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:34.941137" elapsed="0.003850"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.946124" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:34.945263" elapsed="0.000902"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:34.947882" level="INFO">${encoded} = 5000</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-25T23:58:34.947516" elapsed="0.000402"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:34.948011" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:34.948343" level="INFO">${encoded_value} = 5000</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-25T23:58:34.946607" elapsed="0.001775"/>
</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-25T23:58:34.948601" elapsed="0.000520"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:34.945104" elapsed="0.004115"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.936887" elapsed="0.012369"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:34.949299" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:34.949455" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:34.935375" elapsed="0.014105"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:34.935090" elapsed="0.014422"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.949678" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.949537" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:34.935071" elapsed="0.014682"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.950407" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:34.949892" elapsed="0.000543"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:34.950483" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:34.931501" elapsed="0.019108"/>
</kw>
<msg time="2026-04-25T23:58:34.950660" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.919447" elapsed="0.031261"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.962725" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.974401" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.986217" 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-25T23:58:34.986408" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.986577" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.986930" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:34.986792" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:34.986777" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.987163" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.987324" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.987484" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:34.986750" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.986650" elapsed="0.000913"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:34.987702" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:34.987776" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:34.987885" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:34.915265" elapsed="0.072646"/>
</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-25T23:58:35.011370" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.010996" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.012192" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.011881" elapsed="0.000376">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.012349" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.011554" elapsed="0.000819"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.012949" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:35.012563" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.013285" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.013408" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:35.013150" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.013828" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.013586" elapsed="0.000290"/>
</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-25T23:58:35.014254" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.013969" elapsed="0.000344"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.014972" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:35.014477" elapsed="0.000525"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.014338" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.013924" elapsed="0.001137"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.015781" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:35.015202" elapsed="0.000610"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.015862" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.010381" elapsed="0.005620"/>
</kw>
<msg time="2026-04-25T23:58:35.016056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:34.998401" elapsed="0.017711"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.027858" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.039557" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.051235" 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-25T23:58:35.051422" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.051627" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.052000" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.051846" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.051830" elapsed="0.000251"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.052215" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.052378" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.052539" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.051803" elapsed="0.000790"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.051702" elapsed="0.000917"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.052759" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.052835" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:35.052952" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:34.997527" elapsed="0.055471"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.054252" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.054013" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.054413" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.053645" elapsed="0.000793"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.054743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.054507" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.055290" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.055001" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.054824" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.054489" elapsed="0.000884"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.057589" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.055515" elapsed="0.002100"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:35.057665" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.057815" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:35.053329" elapsed="0.004511"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.059352" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.059109" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.059776" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.059541" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.060220" 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-25T23:58:35.059980" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.060641" 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-25T23:58:35.060406" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:35.061515" 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-25T23:58:35.061324" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:35.061864" 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-25T23:58:35.061690" elapsed="0.000200"/>
</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-25T23:58:35.062075" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.062834" 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-25T23:58:35.062422" elapsed="0.000457"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:35.062922" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.063095" 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-25T23:58:35.060911" elapsed="0.002210"/>
</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-25T23:58:35.069632" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '195', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.069682" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:35.069769" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:35.065209" elapsed="0.004585"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.063192" elapsed="0.006648"/>
</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-25T23:58:35.070066" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.069866" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.063174" elapsed="0.006989"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.073420" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.071175" elapsed="0.002290"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.070943" elapsed="0.002557"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.070925" elapsed="0.002600"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.076059" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.073797" elapsed="0.002308"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.073580" elapsed="0.002559"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.073564" elapsed="0.002600"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.076686" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.076319" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.077023" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.076782" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.077554" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.077258" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.077106" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.076764" elapsed="0.000872"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.078177" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.077788" elapsed="0.000415"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.078496" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.078271" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.079040" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.078730" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.078576" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.078253" elapsed="0.000869"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.079264" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:35.080095" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.079802" elapsed="0.000319"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.080269" elapsed="0.002297"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.070511" elapsed="0.012119"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:35.082809" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:58:35.082704" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.082684" elapsed="0.000209"/>
</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-25T23:58:35.083048" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.083116" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:35.085258" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:35.058182" elapsed="0.027102"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.085354" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.085506" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:34.904475" elapsed="0.181056"/>
</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-25T23:58:35.085862" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.085633" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.085615" elapsed="0.000372"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.086024" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:34.900252" elapsed="0.185894"/>
</kw>
<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="PASS" start="2026-04-25T23:58:34.897780" elapsed="0.188427"/>
</kw>
<var name="${index}">10</var>
<status status="PASS" start="2026-04-25T23:58:34.897564" elapsed="0.188682"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.087701" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.087406" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:35.087772" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.087917" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:35.087069" elapsed="0.000873"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.088590" level="INFO">&amp;{mapping} = { ID=working-pair-11 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.088112" elapsed="0.000505"/>
</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-25T23:58:35.121351" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.120975" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.122219" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.121858" elapsed="0.000430">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.122429" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.121537" elapsed="0.000916"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.123009" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.122610" elapsed="0.000427"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.123324" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.123463" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:35.123190" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.123877" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.123636" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.125113" level="INFO">mapping: {'ID': 'working-pair-11', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.124633" elapsed="0.000524"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.125716" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.125309" elapsed="0.000434"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.126828" level="INFO">${value} = working-pair-11</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.126174" elapsed="0.000695"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.128506" level="INFO">${encoded} = working-pair-11</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-25T23:58:35.128128" elapsed="0.000544"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.128748" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:58:35.129103" level="INFO">${encoded_value} = working-pair-11</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-25T23:58:35.127326" elapsed="0.001816"/>
</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-25T23:58:35.129361" elapsed="0.000512"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-11</var>
<status status="PASS" start="2026-04-25T23:58:35.126010" elapsed="0.003996"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.130933" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.130279" elapsed="0.000710"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.132766" level="INFO">${encoded} = 300</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-25T23:58:35.132375" elapsed="0.000426"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.132879" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:35.133229" level="INFO">${encoded_value} = 300</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-25T23:58:35.131433" elapsed="0.001835"/>
</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-25T23:58:35.133492" elapsed="0.000634"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:35.130124" elapsed="0.004101"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.135160" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.134498" elapsed="0.000704"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.136800" level="INFO">${encoded} = 5000</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-25T23:58:35.136439" elapsed="0.000396"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.136910" elapsed="0.000091"/>
</return>
<msg time="2026-04-25T23:58:35.137260" level="INFO">${encoded_value} = 5000</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-25T23:58:35.135635" elapsed="0.001664"/>
</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-25T23:58:35.137516" elapsed="0.000626"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:35.134341" elapsed="0.003898"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.125792" elapsed="0.012483"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.138318" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.138512" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:35.124294" elapsed="0.014243"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.124006" elapsed="0.014563"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.138740" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.138595" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.123985" elapsed="0.014832"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.139423" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.138953" elapsed="0.000498"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.139500" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.120354" elapsed="0.019267"/>
</kw>
<msg time="2026-04-25T23:58:35.139674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.108206" elapsed="0.031516"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.151795" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.163617" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.175367" 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-25T23:58:35.175555" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.175722" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.176085" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.175931" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.175917" elapsed="0.000248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.176298" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.176463" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.176623" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.175890" elapsed="0.000785"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.175794" elapsed="0.000906"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.176837" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.176943" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:35.177071" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:35.104065" elapsed="0.073031"/>
</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-25T23:58:35.200860" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.200489" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.201667" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.201382" elapsed="0.000349">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.201825" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.201059" elapsed="0.000790"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.202423" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:35.202039" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.202739" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.202862" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:35.202605" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.203299" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.203058" elapsed="0.000287"/>
</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-25T23:58:35.203691" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.203411" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.204220" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:35.203912" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.203774" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.203392" elapsed="0.000909"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.205023" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:35.204438" elapsed="0.000615"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.205101" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.199874" elapsed="0.005350"/>
</kw>
<msg time="2026-04-25T23:58:35.205278" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.187621" elapsed="0.017705"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.217086" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.228825" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.240551" 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-25T23:58:35.240738" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.240907" 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-25T23:58:35.241276" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.241137" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.241122" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.241554" 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-25T23:58:35.241718" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.241876" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.241094" elapsed="0.000834"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.240994" elapsed="0.000960"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.242129" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.242204" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:35.242322" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:35.186775" elapsed="0.055575"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.243564" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.243328" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.243718" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.242999" elapsed="0.000744"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.244065" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.243811" elapsed="0.000311"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.244638" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.244343" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.244177" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.243793" elapsed="0.000927"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.248114" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.244866" elapsed="0.003275"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:35.248194" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.248347" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:35.242671" elapsed="0.005701"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.249867" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.249620" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.250338" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.250096" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.250776" 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-25T23:58:35.250533" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.251221" 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-25T23:58:35.250980" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:35.252056" 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-25T23:58:35.251851" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:35.252401" 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-25T23:58:35.252230" elapsed="0.000196"/>
</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-25T23:58:35.252569" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.253176" 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-25T23:58:35.252913" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:35.253263" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.253415" 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-25T23:58:35.251458" elapsed="0.001982"/>
</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-25T23:58:35.261014" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '195', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.261065" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:35.261161" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:35.255524" elapsed="0.005663"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.253510" elapsed="0.007722"/>
</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-25T23:58:35.261407" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.261258" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.253492" elapsed="0.008010"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.264758" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.262541" elapsed="0.002261"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.262321" elapsed="0.002517"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.262303" elapsed="0.002560"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.267563" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.265147" elapsed="0.002463"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.264918" elapsed="0.002728"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.264902" elapsed="0.002769"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.268260" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.267829" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.268592" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.268359" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.269146" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.268829" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.268675" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.268340" elapsed="0.000891"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.269750" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.269385" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.270118" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.269846" elapsed="0.000331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.270650" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.270356" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.270202" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.269828" elapsed="0.000905"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.270876" elapsed="0.000363"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:35.271672" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.271400" elapsed="0.000298"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.271847" elapsed="0.002310"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.261844" elapsed="0.012376"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:35.274398" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:35.274292" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.274274" elapsed="0.000208"/>
</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-25T23:58:35.274624" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.274691" elapsed="0.000014"/>
</return>
<msg time="2026-04-25T23:58:35.276832" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:35.248685" elapsed="0.028173"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.276927" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.277092" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:35.093401" elapsed="0.183716"/>
</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-25T23:58:35.277456" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.277217" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.277200" elapsed="0.000350"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.277582" elapsed="0.000026"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:35.088862" elapsed="0.188841"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.086516" elapsed="0.191246"/>
</kw>
<var name="${index}">11</var>
<status status="PASS" start="2026-04-25T23:58:35.086330" elapsed="0.191505"/>
</iter>
<iter>
<kw name="Start_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.279339" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.279039" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:35.279411" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.279556" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:35.278686" elapsed="0.000895"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.280234" level="INFO">&amp;{mapping} = { ID=working-pair-12 | DURATION=300 | RATE=5000 }</msg>
<var>&amp;{mapping}</var>
<arg>ID=${gid}</arg>
<arg>DURATION=${seconds}</arg>
<arg>RATE=${notif_per_sec}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.279737" elapsed="0.000525"/>
</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-25T23:58:35.312732" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.312364" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.313591" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.313254" elapsed="0.000417">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.313767" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.312915" elapsed="0.000877"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.314391" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.313997" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.314712" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.314851" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:35.314576" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.315295" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.315048" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.316517" level="INFO">mapping: {'ID': 'working-pair-12', 'DURATION': 300, 'RATE': 5000}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.316048" elapsed="0.000517"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.317148" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.316719" elapsed="0.000455"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.318267" level="INFO">${value} = working-pair-12</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.317553" elapsed="0.000757"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.320005" level="INFO">${encoded} = working-pair-12</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-25T23:58:35.319605" elapsed="0.000438"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.320122" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T23:58:35.320469" level="INFO">${encoded_value} = working-pair-12</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-25T23:58:35.318762" elapsed="0.001747"/>
</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-25T23:58:35.320733" elapsed="0.000540"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-12</var>
<status status="PASS" start="2026-04-25T23:58:35.317391" elapsed="0.003983"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.322341" level="INFO">${value} = 300</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.321648" elapsed="0.000734"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.324120" level="INFO">${encoded} = 300</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-25T23:58:35.323658" elapsed="0.000501"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.324283" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:35.324620" level="INFO">${encoded_value} = 300</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-25T23:58:35.322837" elapsed="0.001823"/>
</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-25T23:58:35.324881" elapsed="0.000530"/>
</kw>
<var name="${key}">DURATION</var>
<var name="${value}">300</var>
<status status="PASS" start="2026-04-25T23:58:35.321491" elapsed="0.004023"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.326644" level="INFO">${value} = 5000</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.325789" elapsed="0.000898"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.328407" level="INFO">${encoded} = 5000</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-25T23:58:35.327951" elapsed="0.000492"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.328521" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:35.328855" level="INFO">${encoded_value} = 5000</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-25T23:58:35.327156" elapsed="0.001738"/>
</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-25T23:58:35.329129" elapsed="0.000516"/>
</kw>
<var name="${key}">RATE</var>
<var name="${value}">5000</var>
<status status="PASS" start="2026-04-25T23:58:35.325632" elapsed="0.004112"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.317223" elapsed="0.012558"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.329824" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.330028" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12', 'DURATION': '300', 'RATE': '5000'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:35.315706" elapsed="0.014349"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.315410" elapsed="0.014677"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.330255" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.330112" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.315389" elapsed="0.014941"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.330919" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.330472" elapsed="0.000474"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.331011" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.311748" elapsed="0.019386"/>
</kw>
<msg time="2026-04-25T23:58:35.331186" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.299619" elapsed="0.031616"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.343285" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.355061" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.366810" 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-25T23:58:35.367048" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.367220" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.367570" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.367431" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.367417" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.367782" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.367944" elapsed="0.000035"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.368123" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.367389" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.367291" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.368341" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.368414" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:35.368525" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</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-25T23:58:35.295510" elapsed="0.073041"/>
</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-25T23:58:35.392198" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.391811" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.393010" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/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-25T23:58:35.392705" elapsed="0.000370">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.393167" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.392379" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.393723" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/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-25T23:58:35.393347" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.394075" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.394199" level="INFO">${template} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&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-25T23:58:35.393901" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.394613" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;$ID&lt;/id&gt;
  &lt;seconds&gt;$DURATION&lt;/seconds&gt;
  &lt;notifications-per-second&gt;$RATE&lt;/notifications-per-second&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.394375" elapsed="0.000285"/>
</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-25T23:58:35.395027" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.394726" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.395726" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12', 'DURATION': 300, 'RATE': 5000}</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-25T23:58:35.395249" elapsed="0.000503"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.395111" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.394707" elapsed="0.001138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.396583" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:35.396005" elapsed="0.000609"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.396663" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.391211" elapsed="0.005576"/>
</kw>
<msg time="2026-04-25T23:58:35.396839" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.379138" elapsed="0.017749"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.408798" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.420606" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.432387" 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-25T23:58:35.432572" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.432742" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.433109" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.432955" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.432940" elapsed="0.000248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.433322" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.433488" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.433647" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.432912" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.432814" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.433861" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.433935" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:35.434083" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&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-25T23:58:35.378284" elapsed="0.055828"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.435368" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.435137" elapsed="0.000295">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.435524" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.434786" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.435854" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.435618" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.436400" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.436112" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.435934" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.435599" elapsed="0.000888"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.438753" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.436632" elapsed="0.002147"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:35.438829" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.438997" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/start_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:35.434470" elapsed="0.004552"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.440510" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.440266" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.440932" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.440699" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.441378" 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-25T23:58:35.441140" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.441795" 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-25T23:58:35.441563" elapsed="0.000275"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:35.442638" 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-25T23:58:35.442452" elapsed="0.000211"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:35.442997" 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-25T23:58:35.442810" elapsed="0.000213"/>
</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-25T23:58:35.443166" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.443926" 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-25T23:58:35.443512" elapsed="0.000473"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:35.444030" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.444185" 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-25T23:58:35.442058" elapsed="0.002152"/>
</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-25T23:58:35.457641" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '195', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
  &lt;seconds&gt;300&lt;/seconds&gt;
  &lt;notifications-per-second&gt;5000&lt;/notifications-per-second&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.457724" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:start-publish-notifications 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:35.457819" level="INFO">${response} = &lt;Response [204]&gt;</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="PASS" start="2026-04-25T23:58:35.446341" elapsed="0.011504"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.444279" elapsed="0.013612"/>
</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-25T23:58:35.458105" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.457917" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.444261" elapsed="0.013936"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.461444" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.459215" elapsed="0.002272"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.459000" elapsed="0.002522"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.458981" elapsed="0.002567"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.464109" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.461816" elapsed="0.002339"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.461603" elapsed="0.002586"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.461586" elapsed="0.002627"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.464744" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.464369" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.465084" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.464839" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.465630" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.465320" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.465166" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.464821" elapsed="0.000891"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.466271" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.465864" elapsed="0.000434"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.466591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.466367" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.467132" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.466823" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.466671" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.466349" elapsed="0.000863"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.467356" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:35.468148" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.467861" elapsed="0.000313"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.468321" elapsed="0.002312"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.458550" elapsed="0.012145"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:35.470873" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:35.470767" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.470748" elapsed="0.000225"/>
</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-25T23:58:35.471119" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.471186" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:35.473343" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:35.439337" elapsed="0.034032"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.473476" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.473631" level="INFO">${response_text} = </msg>
<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="PASS" start="2026-04-25T23:58:35.284705" elapsed="0.188950"/>
</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-25T23:58:35.474025" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.473759" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.473741" elapsed="0.000380"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.474154" elapsed="0.000025"/>
</return>
<arg>${START_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:35.280508" elapsed="0.193767"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.278144" elapsed="0.196193"/>
</kw>
<var name="${index}">12</var>
<status status="PASS" start="2026-04-25T23:58:35.277922" elapsed="0.196455"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-25T23:58:33.170728" elapsed="2.303685"/>
</for>
<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-25T23:58:35.474907" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.475128" level="INFO">${getter} = ['Get_Notifications_Active_Status', ['1', 12], {}]</msg>
<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="PASS" start="2026-04-25T23:58:35.474614" elapsed="0.000539"/>
</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-25T23:58:35.475582" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.475784" level="INFO">${validator} = ['Check_Notifications_Active_Status', ['data_holder'], {}]</msg>
<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="PASS" start="2026-04-25T23:58:35.475354" elapsed="0.000455"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.476348" level="INFO">${validation_timeout_in_seconds} = 1020.0</msg>
<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="PASS" start="2026-04-25T23:58:35.475975" elapsed="0.000399"/>
</kw>
<kw name="Wait_For_Getter_Failure_Or_Stateless_Validator_Pass" owner="WaitUtils">
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.478181" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.477737" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.477719" elapsed="0.000544"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:58:35.478691" level="INFO">${period_in_seconds} = 600.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:58:35.478405" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.479060" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.478788" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.478770" elapsed="0.000373"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:58:35.479451" level="INFO">${date_now} = 2026-04-25 23:58:35.479</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:58:35.479285" elapsed="0.000191"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-25T23:58:35.479885" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-25T23:58:35.479620" elapsed="0.000291"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-25T23:58:35.480388" level="INFO">${date_deadline} = 2026-04-26 00:15:35.479</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-25T23:58:35.480079" elapsed="0.000336"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-25T23:58:35.480462" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.480699" level="INFO">${timeout_in_seconds} = 1020.0</msg>
<msg time="2026-04-25T23:58:35.480746" level="INFO">${period_in_seconds} = 600.0</msg>
<msg time="2026-04-25T23:58:35.480788" level="INFO">${date_deadline} = 2026-04-26 00:15:35.479</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-25T23:58:35.477386" elapsed="0.003425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.481359" level="INFO">${iterations} = 1.7</msg>
<var>${iterations}</var>
<arg>${timeout_in_seconds} / ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.480990" elapsed="0.000395"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.483512" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:58:35.483560" level="INFO">${args} = ['1', 12]</msg>
<msg time="2026-04-25T23:58:35.483603" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.483207" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.484903" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:58:35.484660" elapsed="0.000269"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.487298" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.486547" elapsed="0.000831"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:35.487508" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:35.487774" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:35.486091" elapsed="0.001709"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.488469" 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-25T23:58:35.487978" elapsed="0.000518"/>
</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-25T23:58:35.525183" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.524782" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.525939" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.525702" elapsed="0.000354">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.526151" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.525374" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.526714" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.526334" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.527049" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.527193" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:35.526896" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.527635" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.527386" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.528638" 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-25T23:58:35.528386" elapsed="0.000296"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.529108" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.528834" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.529764" 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-25T23:58:35.529476" elapsed="0.000314"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.530716" 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-25T23:58:35.530496" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.530794" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:35.530946" 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-25T23:58:35.530188" elapsed="0.000798"/>
</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-25T23:58:35.531134" elapsed="0.000227"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-25T23:58:35.529346" elapsed="0.002115"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.529183" elapsed="0.002318"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.531545" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.531701" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:35.528067" elapsed="0.003659"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.527751" elapsed="0.004007"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.531925" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.531782" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.527729" elapsed="0.004289"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.532602" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.532157" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.532677" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.524155" elapsed="0.008642"/>
</kw>
<msg time="2026-04-25T23:58:35.532849" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.512074" elapsed="0.020826"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.544806" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.556581" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.568355" 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-25T23:58:35.568546" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.568713" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.569079" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.568926" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.568911" elapsed="0.000248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.569298" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.569460" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.569618" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.568883" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.568785" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.569869" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.569947" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:35.570146" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:35.507578" elapsed="0.062611"/>
</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-25T23:58:35.594006" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:35.593624" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.594739" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:35.594526" elapsed="0.000277">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.594894" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.594206" elapsed="0.000712"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.595463" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:35.595089" elapsed="0.000400"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.595779" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.595899" 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-25T23:58:35.595646" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.596329" 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-25T23:58:35.596090" elapsed="0.000284"/>
</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-25T23:58:35.596722" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.596439" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.597246" 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-25T23:58:35.596941" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.596804" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.596420" elapsed="0.000908"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.598012" 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-25T23:58:35.597465" elapsed="0.000599"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.598114" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.593023" elapsed="0.005215"/>
</kw>
<msg time="2026-04-25T23:58:35.598289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.580949" elapsed="0.017390"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.610294" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.622225" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.633846" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.634072" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.634247" 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-25T23:58:35.634596" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.634459" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.634445" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.634807" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.634981" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.635142" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.634417" elapsed="0.000777"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.634319" elapsed="0.000900"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.635355" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.635434" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:35.635572" 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-25T23:58:35.579991" elapsed="0.055624"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.637102" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.636852" elapsed="0.000313">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.637255" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.636521" elapsed="0.000759"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.637583" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.637348" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.638148" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.637828" elapsed="0.000377"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.637664" elapsed="0.000579"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.637330" elapsed="0.000934"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.640506" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.638410" elapsed="0.002123"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:35.640584" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.640760" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:35.636073" elapsed="0.004726"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.642587" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.642338" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.643030" 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-25T23:58:35.642780" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.643456" 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-25T23:58:35.643218" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.643876" 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-25T23:58:35.643643" elapsed="0.000275"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:35.644710" 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-25T23:58:35.644523" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:35.645079" 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-25T23:58:35.644882" elapsed="0.000222"/>
</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-25T23:58:35.645247" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.645830" 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-25T23:58:35.645589" elapsed="0.000284"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:35.645916" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.646105" 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-25T23:58:35.644127" elapsed="0.002008"/>
</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-25T23:58:35.652370" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-25T23:58:35.652621" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11247&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.652720" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:35.648368" elapsed="0.004378"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.646208" elapsed="0.006585"/>
</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-25T23:58:35.652988" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.652819" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.646190" elapsed="0.006890"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.656379" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11247&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.654107" elapsed="0.002327"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.653855" elapsed="0.002613"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.653837" elapsed="0.002656"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.659040" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.656761" elapsed="0.002325"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.656548" elapsed="0.002573"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.656532" elapsed="0.002613"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.659708" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.659336" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.660049" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.659806" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.660584" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.660287" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.660133" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.659787" elapsed="0.000880"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.661190" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.660817" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.661511" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.661286" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.662077" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.661743" elapsed="0.000362"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.661592" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.661267" elapsed="0.000895"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.662305" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:35.663098" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.662805" elapsed="0.000319"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.663273" elapsed="0.002291"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.653426" elapsed="0.012201"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:35.665805" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:35.665699" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.665680" elapsed="0.000211"/>
</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-25T23:58:35.666064" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.666135" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:35.668361" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11247&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:35.641247" elapsed="0.027159"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.668546" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:35.668842" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11247&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:35.494244" elapsed="0.174679"/>
</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-25T23:58:35.669693" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.669146" elapsed="0.000647"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.669127" elapsed="0.000715"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.669891" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.670203" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11247&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:35.488773" elapsed="0.181489"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:35.670875" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a9e1030&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:35.670431" elapsed="0.000472"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:35.671480" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:35.671074" elapsed="0.000433"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.672077" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.671661" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:35.672787" elapsed="0.000625"/>
</kw>
<msg time="2026-04-25T23:58:35.673555" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:35.673600" level="INFO">${publish_count} = 11247</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:35.672263" elapsed="0.001361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.674028" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.673703" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.673683" elapsed="0.000537"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.674936" level="INFO">${publish_count} = 11247</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.674367" elapsed="0.000611"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:35.676310" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.675668" elapsed="0.000833">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:35.676643" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:35.676689" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:35.675144" elapsed="0.001568"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.677084" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.676790" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.676771" elapsed="0.000490"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.682954" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.677404" elapsed="0.005591"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:35.683048" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.683279" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:35.683324" level="INFO">${publ_count} = 11247</msg>
<msg time="2026-04-25T23:58:35.683364" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:35.485546" elapsed="0.197841"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.683546" elapsed="0.000229"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:35.683929" elapsed="0.005847"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:58:35.485175" elapsed="0.204648"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.692240" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.691493" elapsed="0.000828"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:35.692451" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:35.692717" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:35.691034" elapsed="0.001709"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.693411" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-25T23:58:35.692900" elapsed="0.000538"/>
</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-25T23:58:35.730987" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.730590" elapsed="0.000491"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.731841" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.731579" elapsed="0.000331">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.732021" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.731247" elapsed="0.000800"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.732587" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.732207" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.732905" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.733067" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:35.732769" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.733492" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.733245" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.734504" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.734251" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.734966" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.734702" elapsed="0.000290"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.735648" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.735352" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.736446" level="INFO">${encoded} = working-pair-2</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-25T23:58:35.736230" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.736524" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:35.736676" level="INFO">${encoded_value} = working-pair-2</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-25T23:58:35.735857" elapsed="0.000844"/>
</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-25T23:58:35.736847" elapsed="0.000246"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-25T23:58:35.735224" elapsed="0.001910"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.735058" elapsed="0.002110"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.737211" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:35.737363" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:35.733914" elapsed="0.003474"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.733609" elapsed="0.003811"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.737587" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.737445" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.733587" elapsed="0.004077"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.738255" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.737801" elapsed="0.000481"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.738331" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.729906" elapsed="0.008547"/>
</kw>
<msg time="2026-04-25T23:58:35.738505" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.716427" elapsed="0.022163"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.792477" elapsed="0.000062"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.804403" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.816195" 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-25T23:58:35.816399" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.816579" 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-25T23:58:35.816971" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.816824" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.816807" elapsed="0.000264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.817208" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.817372" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.817533" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.816772" elapsed="0.000815"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.816659" elapsed="0.000954"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.817755" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.817832" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:35.818057" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:35.712192" elapsed="0.105910"/>
</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-25T23:58:35.842310" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:35.841906" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.843089" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:35.842823" elapsed="0.000340">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.843316" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.842494" elapsed="0.000847"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.843885" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:35.843501" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.844226" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.844377" 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-25T23:58:35.844087" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.844808" 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-25T23:58:35.844563" elapsed="0.000292"/>
</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-25T23:58:35.845232" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.844922" elapsed="0.000372"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.845786" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-25T23:58:35.845489" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.845347" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.844903" elapsed="0.000977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.846583" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:35.846041" elapsed="0.000572"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.846663" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.841306" elapsed="0.005484"/>
</kw>
<msg time="2026-04-25T23:58:35.846845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.829155" elapsed="0.017741"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.858889" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.870778" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.882567" 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-25T23:58:35.882756" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.882926" elapsed="0.000056"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.883358" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.883216" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:35.883200" elapsed="0.000240"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.883575" 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-25T23:58:35.883741" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.883904" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:35.883154" elapsed="0.000803"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.883053" elapsed="0.000935"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.884146" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.884222" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:35.884363" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:35.828102" elapsed="0.056304"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.885901" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.885665" elapsed="0.000302">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.886078" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.885320" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.886416" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.886176" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.886952" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.886662" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.886497" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.886157" elapsed="0.000898"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.889332" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.887202" elapsed="0.002156"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:35.889408" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:35.889586" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:35.884843" elapsed="0.004784"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.891412" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.891159" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.891869" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-25T23:58:35.891631" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.892322" 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-25T23:58:35.892079" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.892749" 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-25T23:58:35.892510" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:35.893591" 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-25T23:58:35.893397" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:35.893981" 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-25T23:58:35.893803" elapsed="0.000221"/>
</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-25T23:58:35.894172" elapsed="0.000209"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.894777" 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-25T23:58:35.894531" elapsed="0.000291"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:35.894865" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:35.895048" 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-25T23:58:35.892989" elapsed="0.002086"/>
</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-25T23:58:35.901339" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.901576" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10729&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.901686" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:35.897353" elapsed="0.004359"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.895147" elapsed="0.006611"/>
</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-25T23:58:35.901932" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.901784" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.895128" elapsed="0.006921"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.905782" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10729&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.903066" elapsed="0.002786"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.902831" elapsed="0.003070"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.902813" elapsed="0.003123"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.909560" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.906346" elapsed="0.003280"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.906042" elapsed="0.003632"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.905997" elapsed="0.003712"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.910485" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.909933" elapsed="0.000591"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.910954" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.910629" elapsed="0.000434"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.911746" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.911319" elapsed="0.000464"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.911098" elapsed="0.000734"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.910601" elapsed="0.001264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.912662" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.912111" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.913151" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.912801" elapsed="0.000432"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.913756" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.913463" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.913266" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.912775" elapsed="0.001063"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.913984" elapsed="0.000363"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:35.914829" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.914546" elapsed="0.000309"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.915024" elapsed="0.002331"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.902398" elapsed="0.015021"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:35.917604" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:35.917496" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.917476" elapsed="0.000216"/>
</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-25T23:58:35.917835" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:35.917906" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:35.920157" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10729&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:35.890097" elapsed="0.030103"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.920341" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:35.920644" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10729&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:35.699250" elapsed="0.221477"/>
</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-25T23:58:35.921563" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.920922" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.920903" elapsed="0.000814"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.921768" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.922065" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10729&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:35.693717" elapsed="0.228377"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:35.922706" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ac46930&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:35.922256" elapsed="0.000478"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:35.923322" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:35.922889" elapsed="0.000459"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.923908" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.923501" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:35.924652" elapsed="0.000665"/>
</kw>
<msg time="2026-04-25T23:58:35.925465" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:35.925514" level="INFO">${publish_count} = 10729</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:35.924113" elapsed="0.001424"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.925904" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.925616" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.925596" elapsed="0.000554"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.926919" level="INFO">${publish_count} = 10729</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.926336" elapsed="0.000610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:35.928335" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.927664" elapsed="0.000872">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:35.928682" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:35.928729" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:35.927131" elapsed="0.001621"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.929135" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.928830" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.928811" elapsed="0.000509"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.935218" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.929506" elapsed="0.005739"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:35.935298" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:35.935534" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:35.935579" level="INFO">${publ_count} = 10729</msg>
<msg time="2026-04-25T23:58:35.935619" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:35.690516" elapsed="0.245124"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.935799" elapsed="0.000252"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:35.936204" elapsed="0.006307"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:58:35.689924" elapsed="0.252633"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.944942" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.944192" elapsed="0.000852"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:35.945179" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:58:35.945452" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:35.943595" elapsed="0.001883"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.946158" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-25T23:58:35.945638" elapsed="0.000548"/>
</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-25T23:58:35.982597" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:35.982219" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.983383" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.983136" elapsed="0.000318">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:35.983545" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:35.982783" elapsed="0.000786"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.984124" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:35.983725" elapsed="0.000439"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:35.984464" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:35.984615" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:35.984326" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.985108" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.984842" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.986119" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:35.985840" elapsed="0.000324"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.986584" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:35.986322" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.987282" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:35.986972" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:35.988039" level="INFO">${encoded} = working-pair-3</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-25T23:58:35.987794" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:35.988121" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:35.988284" level="INFO">${encoded_value} = working-pair-3</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-25T23:58:35.987485" elapsed="0.000823"/>
</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-25T23:58:35.988486" elapsed="0.000247"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-25T23:58:35.986839" elapsed="0.001935"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.986657" elapsed="0.002151"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:35.988851" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:35.989023" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:35.985523" elapsed="0.003527"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:35.985225" elapsed="0.003857"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:35.989256" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:35.989108" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:35.985204" elapsed="0.004129"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.989924" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:35.989473" elapsed="0.000478"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:35.990018" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:35.981597" elapsed="0.008547"/>
</kw>
<msg time="2026-04-25T23:58:35.990198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:35.969324" elapsed="0.020925"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.002257" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.014015" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.025736" 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-25T23:58:36.025965" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.026155" 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-25T23:58:36.026535" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.026396" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.026381" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.026749" 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-25T23:58:36.026912" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.027093" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.026352" elapsed="0.000796"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.026250" elapsed="0.000924"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.027315" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.027391" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:36.027527" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:35.965085" elapsed="0.062487"/>
</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-25T23:58:36.051593" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.051208" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.052335" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.052121" elapsed="0.000276">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.052488" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.051777" elapsed="0.000735"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.053061" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:36.052665" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.053371" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.053495" 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-25T23:58:36.053239" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.053908" 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-25T23:58:36.053668" elapsed="0.000285"/>
</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-25T23:58:36.054317" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.054038" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.054825" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-25T23:58:36.054538" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.054400" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.054018" elapsed="0.000888"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.055625" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:36.055061" elapsed="0.000596"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.055736" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.050591" elapsed="0.005269"/>
</kw>
<msg time="2026-04-25T23:58:36.055912" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.038430" elapsed="0.017532"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.067849" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.079572" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.091354" 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-25T23:58:36.091543" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.091711" 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-25T23:58:36.092082" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.091925" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.091910" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.092297" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.092458" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.092617" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.091882" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.091784" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.092831" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.092905" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.093070" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:36.037440" elapsed="0.055675"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.094647" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.094412" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.094800" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.094075" elapsed="0.000749"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.095151" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.094892" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.095689" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.095399" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.095233" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.094874" elapsed="0.000896"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.098070" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.095913" elapsed="0.002184"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:36.098147" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.098321" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:36.093610" elapsed="0.004750"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.100116" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.099847" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.100542" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-25T23:58:36.100309" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.100972" 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-25T23:58:36.100731" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.101409" 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-25T23:58:36.101175" elapsed="0.000277"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:36.102290" 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-25T23:58:36.102099" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:36.102633" 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-25T23:58:36.102463" elapsed="0.000195"/>
</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-25T23:58:36.102799" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.103408" 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-25T23:58:36.103165" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:36.103493" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.103646" 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-25T23:58:36.101643" elapsed="0.002028"/>
</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-25T23:58:36.110147" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.110400" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11384&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.110498" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:36.105895" elapsed="0.004629"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.103742" elapsed="0.006829"/>
</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-25T23:58:36.110746" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.110597" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.103724" elapsed="0.007145"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.114185" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11384&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.111877" elapsed="0.002358"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.111662" elapsed="0.002607"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.111644" elapsed="0.002650"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.117491" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.114573" elapsed="0.002983"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.114349" elapsed="0.003254"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.114332" elapsed="0.003306"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.118402" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.117857" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.118881" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.118538" elapsed="0.000424"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.119658" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.119238" elapsed="0.000457"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.119000" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.118512" elapsed="0.001262"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.120510" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.119990" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.120962" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.120642" elapsed="0.000420"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.121732" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.121314" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.121097" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.120617" elapsed="0.001230"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.122071" elapsed="0.000481"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:36.123218" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.122774" elapsed="0.000481"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.123451" elapsed="0.002283"/>
</kw>
<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="PASS" start="2026-04-25T23:58:36.111233" elapsed="0.014566"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:36.125984" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-25T23:58:36.125873" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.125854" elapsed="0.000233"/>
</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-25T23:58:36.126231" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.126299" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:36.128545" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11384&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.098779" elapsed="0.029810"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.128729" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:36.129054" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11384&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:35.951875" elapsed="0.177294"/>
</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-25T23:58:36.130074" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.129367" elapsed="0.000810"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.129347" elapsed="0.000879"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.130275" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:36.130546" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11384&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:35.946507" elapsed="0.184069"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:36.131195" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0cdce2a0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:36.130736" elapsed="0.000487"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.131806" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.131375" elapsed="0.000458"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.132413" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.131989" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.133143" elapsed="0.000613"/>
</kw>
<msg time="2026-04-25T23:58:36.133891" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:36.133937" level="INFO">${publish_count} = 11384</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.132596" elapsed="0.001368"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.134358" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.134072" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.134051" elapsed="0.000482"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.135268" level="INFO">${publish_count} = 11384</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.134679" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.136671" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.136032" elapsed="0.000827">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:36.137021" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:36.137070" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.135457" elapsed="0.001636"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.137450" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.137170" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.137151" elapsed="0.000483"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.143370" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.137788" elapsed="0.005609"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:36.143453" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.143683" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:36.143728" level="INFO">${publ_count} = 11384</msg>
<msg time="2026-04-25T23:58:36.143768" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:35.943080" elapsed="0.200714"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.143968" elapsed="0.000373"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:36.144499" elapsed="0.006200"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:58:35.942667" elapsed="0.208127"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.153149" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.152339" elapsed="0.000892"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:36.153363" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:58:36.153635" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:36.151854" elapsed="0.001807"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.154431" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-25T23:58:36.153819" elapsed="0.000640"/>
</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-25T23:58:36.190804" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.190425" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.191576" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.191336" elapsed="0.000309">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.191736" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.190994" elapsed="0.000767"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.192320" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.191916" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.192642" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.192790" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:36.192503" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.193228" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.192971" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.194243" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.193971" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.194718" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.194437" elapsed="0.000307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.195397" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:36.195104" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:36.196145" level="INFO">${encoded} = working-pair-4</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-25T23:58:36.195910" elapsed="0.000261"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:36.196221" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.196373" level="INFO">${encoded_value} = working-pair-4</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-25T23:58:36.195603" elapsed="0.000802"/>
</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-25T23:58:36.196551" elapsed="0.000230"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-25T23:58:36.194957" elapsed="0.001864"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.194792" elapsed="0.002065"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.196900" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:36.197075" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:36.193656" elapsed="0.003445"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.193341" elapsed="0.003792"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.197304" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.197159" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.193321" elapsed="0.004098"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.198004" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.197561" elapsed="0.000490"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.198100" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.189763" elapsed="0.008461"/>
</kw>
<msg time="2026-04-25T23:58:36.198277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.177505" elapsed="0.020824"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.210309" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.222132" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.233870" 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-25T23:58:36.234075" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.234246" 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-25T23:58:36.234603" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.234466" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.234451" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.234813" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.234977" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.235152" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.234419" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.234318" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.235368" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.235442" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.235576" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:36.173188" elapsed="0.062429"/>
</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-25T23:58:36.259715" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.259342" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.260467" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.260245" elapsed="0.000285">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.260621" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.259896" elapsed="0.000749"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.261203" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:36.260800" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.261518" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.261642" 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-25T23:58:36.261384" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.262099" 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-25T23:58:36.261822" elapsed="0.000323"/>
</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-25T23:58:36.262496" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.262211" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.263023" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-25T23:58:36.262717" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.262578" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.262192" elapsed="0.000914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.263777" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:36.263245" elapsed="0.000560"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.263853" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.258728" elapsed="0.005252"/>
</kw>
<msg time="2026-04-25T23:58:36.264056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.246535" elapsed="0.017574"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.276080" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.287838" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.299690" elapsed="0.000063"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.299916" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.300102" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.300456" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.300319" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.300303" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.300666" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.300825" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.300987" elapsed="0.000034"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.300275" elapsed="0.000781"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.300178" elapsed="0.000903"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.301218" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.301293" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:36.301438" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:36.245550" elapsed="0.055931"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.302970" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.302731" elapsed="0.000321">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.303145" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.302396" elapsed="0.000773"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.303475" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.303238" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.304052" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.303725" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.303556" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.303219" elapsed="0.000916"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.306376" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.304280" elapsed="0.002122"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:36.306452" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.306628" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:36.301919" elapsed="0.004749"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.308470" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.308217" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.308935" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-25T23:58:36.308698" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.309389" 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-25T23:58:36.309146" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.309814" 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-25T23:58:36.309574" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:36.310660" 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-25T23:58:36.310472" elapsed="0.000214"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:36.311031" 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-25T23:58:36.310834" elapsed="0.000224"/>
</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-25T23:58:36.311202" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.311792" 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-25T23:58:36.311549" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:36.311877" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.312052" 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-25T23:58:36.310072" elapsed="0.002006"/>
</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-25T23:58:36.319516" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.319750" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10506&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.319857" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:36.315365" elapsed="0.004518"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.312149" elapsed="0.007779"/>
</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-25T23:58:36.320128" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.319954" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.312130" elapsed="0.008087"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.323542" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10506&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.321255" elapsed="0.002337"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.321039" elapsed="0.002589"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.321020" elapsed="0.002633"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.326578" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.323924" elapsed="0.002719"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.323709" elapsed="0.002982"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.323692" elapsed="0.003034"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.327497" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.326946" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.327954" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.327634" elapsed="0.000427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.328725" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.328309" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.328095" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.327609" elapsed="0.001233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.329605" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.329080" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.330142" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.329787" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.330888" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.330474" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.330257" elapsed="0.000723"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.329761" elapsed="0.001270"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.331236" elapsed="0.000490"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:36.332358" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.331946" elapsed="0.000450"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.332608" elapsed="0.002848"/>
</kw>
<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="PASS" start="2026-04-25T23:58:36.320567" elapsed="0.014955"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:36.335702" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:36.335595" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.335576" elapsed="0.000212"/>
</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-25T23:58:36.335931" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.336017" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:58:36.338261" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10506&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.307131" elapsed="0.031175"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.338448" elapsed="0.000077"/>
</return>
<msg time="2026-04-25T23:58:36.338751" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10506&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.160212" elapsed="0.178621"/>
</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-25T23:58:36.339598" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.339053" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.339032" elapsed="0.000714"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.339795" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.340082" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10506&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:36.154741" elapsed="0.185370"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:36.340706" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ae6c900&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:36.340270" elapsed="0.000463"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.341304" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.340884" elapsed="0.000448"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.341928" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.341483" elapsed="0.000472"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.342659" elapsed="0.000629"/>
</kw>
<msg time="2026-04-25T23:58:36.343461" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:36.343510" level="INFO">${publish_count} = 10506</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.342129" elapsed="0.001405"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.343896" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.343611" elapsed="0.000488"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.343592" elapsed="0.000534"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.344838" level="INFO">${publish_count} = 10506</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.344274" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.346231" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.345568" elapsed="0.000850">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:36.346561" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:36.346606" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.345045" elapsed="0.001585"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.346989" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.346707" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.346688" elapsed="0.000494"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.352880" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.347326" elapsed="0.005581"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:36.352963" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.353215" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:36.353259" level="INFO">${publ_count} = 10506</msg>
<msg time="2026-04-25T23:58:36.353300" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:36.151338" elapsed="0.201985"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.353482" elapsed="0.000264"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:36.353903" elapsed="0.006365"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-25T23:58:36.150909" elapsed="0.209400"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.362583" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.361799" elapsed="0.000866"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:36.362799" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T23:58:36.363111" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:36.361340" elapsed="0.001797"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.363792" level="INFO">&amp;{mapping} = { ID=working-pair-5 }</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-25T23:58:36.363297" elapsed="0.000522"/>
</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-25T23:58:36.400047" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.399659" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.400844" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.400557" elapsed="0.000357">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.401021" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.400233" elapsed="0.000813"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.401579" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.401205" elapsed="0.000446"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.401945" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.402111" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:36.401809" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.402528" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.402288" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.403677" level="INFO">mapping: {'ID': 'working-pair-5'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.403423" elapsed="0.000299"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.404163" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.403877" elapsed="0.000313"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.404825" level="INFO">${value} = working-pair-5</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:36.404533" elapsed="0.000318"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:36.405599" level="INFO">${encoded} = working-pair-5</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-25T23:58:36.405383" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:36.405673" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.405823" level="INFO">${encoded_value} = working-pair-5</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-25T23:58:36.405072" elapsed="0.000775"/>
</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-25T23:58:36.405996" elapsed="0.000239"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-5</var>
<status status="PASS" start="2026-04-25T23:58:36.404405" elapsed="0.001870"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.404239" elapsed="0.002070"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.406352" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:36.406506" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:36.402928" elapsed="0.003602"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.402642" elapsed="0.003920"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.406730" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.406588" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.402622" elapsed="0.004184"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.407402" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.406944" elapsed="0.000485"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.407477" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.399058" elapsed="0.008541"/>
</kw>
<msg time="2026-04-25T23:58:36.407651" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.386953" elapsed="0.020749"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.419493" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.431260" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.443467" 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-25T23:58:36.443655" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.443823" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.444198" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.444058" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.444043" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.444409" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.444569" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.444728" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.443997" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.443895" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.444944" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.445038" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:36.445173" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:36.382723" elapsed="0.062490"/>
</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-25T23:58:36.469473" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.469100" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.470219" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.469982" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.470373" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.469656" elapsed="0.000741"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.470935" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:36.470553" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.471273" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.471397" 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-25T23:58:36.471138" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.471848" 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-25T23:58:36.471606" elapsed="0.000288"/>
</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-25T23:58:36.472279" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.471964" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.472790" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</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-25T23:58:36.472500" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.472362" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.471941" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.473567" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:36.473044" elapsed="0.000552"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.473645" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.468477" elapsed="0.005292"/>
</kw>
<msg time="2026-04-25T23:58:36.473822" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.456065" elapsed="0.017808"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.485910" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.497713" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.509463" 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-25T23:58:36.509648" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.509813" 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-25T23:58:36.510222" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.510043" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.510027" elapsed="0.000274"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.510435" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.510595" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.510752" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.509985" elapsed="0.000853"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.509885" elapsed="0.000981"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.511026" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.511103" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.511244" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:36.455061" elapsed="0.056225"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.512772" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.512537" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.512925" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.512196" elapsed="0.000754"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.513281" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.513041" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.513814" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.513528" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.513362" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.513021" elapsed="0.000873"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.516369" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.514055" elapsed="0.002340"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:36.516447" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.516640" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:36.511723" elapsed="0.004958"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.518469" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.518218" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.518935" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-25T23:58:36.518698" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.519390" 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-25T23:58:36.519146" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.519816" 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-25T23:58:36.519577" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:36.520659" 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-25T23:58:36.520469" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:36.521021" 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-25T23:58:36.520833" elapsed="0.000215"/>
</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-25T23:58:36.521191" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.521778" 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-25T23:58:36.521536" elapsed="0.000284"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:36.521863" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.522044" 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-25T23:58:36.520076" elapsed="0.001994"/>
</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-25T23:58:36.529737" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.529976" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10810&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.530095" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:36.524198" elapsed="0.005923"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.522179" elapsed="0.007989"/>
</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-25T23:58:36.530341" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.530194" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.522159" elapsed="0.008272"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.533862" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10810&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.531463" elapsed="0.002450"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.531249" elapsed="0.002699"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.531231" elapsed="0.002745"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.536639" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.534265" elapsed="0.002439"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.534048" elapsed="0.002705"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.534030" elapsed="0.002759"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.537686" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.537102" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.538175" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.537825" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.539023" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.538541" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.538294" elapsed="0.000820"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.537799" elapsed="0.001345"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.539937" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.539359" elapsed="0.000616"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.540420" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.540097" elapsed="0.000423"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.541351" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.540802" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.540562" elapsed="0.000875"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.540071" elapsed="0.001396"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.541666" elapsed="0.000501"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:36.542772" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.542387" elapsed="0.000421"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.543038" elapsed="0.002744"/>
</kw>
<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="PASS" start="2026-04-25T23:58:36.530783" elapsed="0.015062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:36.546045" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:36.545919" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.545900" elapsed="0.000267"/>
</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-25T23:58:36.546310" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.546380" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.548631" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10810&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.517153" elapsed="0.031522"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.548816" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:36.549145" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10810&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.369697" elapsed="0.179531"/>
</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-25T23:58:36.549966" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.549421" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.549401" elapsed="0.000732"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.550183" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.550452" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10810&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:36.364119" elapsed="0.186364"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:36.551101" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ca7f790&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:36.550644" elapsed="0.000484"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.551683" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.551280" elapsed="0.000430"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.552333" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.551861" elapsed="0.000498"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.553064" elapsed="0.000614"/>
</kw>
<msg time="2026-04-25T23:58:36.553816" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:36.553861" level="INFO">${publish_count} = 10810</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.552516" elapsed="0.001368"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.554282" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.553963" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.553940" elapsed="0.000518"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.555199" level="INFO">${publish_count} = 10810</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.554606" elapsed="0.000619"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.556586" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.555909" elapsed="0.000861">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:36.556912" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:36.556957" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.555385" elapsed="0.001598"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.557355" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.557074" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.557055" elapsed="0.000510"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.563188" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.557710" elapsed="0.005507"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:36.563271" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:36.563515" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:36.563560" level="INFO">${publ_count} = 10810</msg>
<msg time="2026-04-25T23:58:36.563601" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:36.360809" elapsed="0.202814"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.563788" elapsed="0.000258"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:36.564200" elapsed="0.006354"/>
</kw>
<var name="${index}">5</var>
<status status="PASS" start="2026-04-25T23:58:36.360418" elapsed="0.210176"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.572858" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.572104" elapsed="0.000834"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:36.573094" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:36.573383" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:36.571626" elapsed="0.001782"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.574085" level="INFO">&amp;{mapping} = { ID=working-pair-6 }</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-25T23:58:36.573565" elapsed="0.000548"/>
</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-25T23:58:36.610386" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.609997" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.611190" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.610897" elapsed="0.000360">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.611349" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.610572" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.611910" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.611531" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.612245" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.612392" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:36.612110" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.612808" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.612566" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.613947" level="INFO">mapping: {'ID': 'working-pair-6'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.613688" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.614433" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.614170" elapsed="0.000290"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.615125" level="INFO">${value} = working-pair-6</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:36.614809" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:36.615879" level="INFO">${encoded} = working-pair-6</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-25T23:58:36.615662" elapsed="0.000284"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:36.616005" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:58:36.616174" level="INFO">${encoded_value} = working-pair-6</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-25T23:58:36.615349" elapsed="0.000851"/>
</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-25T23:58:36.616347" elapsed="0.000228"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-6</var>
<status status="PASS" start="2026-04-25T23:58:36.614680" elapsed="0.001936"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.614513" elapsed="0.002138"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.616693" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.616849" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:36.613232" elapsed="0.003643"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.612921" elapsed="0.003985"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.617094" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.616931" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.612901" elapsed="0.004270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.617740" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.617308" elapsed="0.000460"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.617816" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.609390" elapsed="0.008549"/>
</kw>
<msg time="2026-04-25T23:58:36.617995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.597275" elapsed="0.020788"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.629824" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.641770" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.653465" 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-25T23:58:36.653653" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.653823" 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-25T23:58:36.654195" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.654056" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.654041" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.654407" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.654608" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.654771" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.653998" elapsed="0.000826"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.653895" elapsed="0.000955"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.654994" elapsed="0.000037"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.655088" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:36.655224" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:36.593005" elapsed="0.062261"/>
</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-25T23:58:36.679381" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.678992" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.680114" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.679884" elapsed="0.000293">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.680269" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.679564" elapsed="0.000729"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.680822" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:36.680448" elapsed="0.000401"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.681152" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.681274" 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-25T23:58:36.681018" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.681689" 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-25T23:58:36.681449" elapsed="0.000285"/>
</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-25T23:58:36.682101" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.681799" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.682643" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</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-25T23:58:36.682324" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.682185" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.681781" elapsed="0.000944"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.683406" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:36.682865" elapsed="0.000570"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.683483" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.678352" elapsed="0.005255"/>
</kw>
<msg time="2026-04-25T23:58:36.683693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.666018" elapsed="0.017728"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.695422" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.707116" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.718775" 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-25T23:58:36.718964" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.719149" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.719500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.719362" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.719347" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.719711" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.719871" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.720048" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.719320" elapsed="0.000782"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.719223" elapsed="0.000904"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.720265" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.720339" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.720507" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:36.664999" elapsed="0.055554"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.722048" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.721792" elapsed="0.000319">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.722202" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.721456" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.722569" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.722329" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.723123" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.722813" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.722650" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.722310" elapsed="0.000894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.725631" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.723349" elapsed="0.002309"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:36.725710" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.725888" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:36.720989" elapsed="0.004939"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.727690" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.727440" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.728137" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-25T23:58:36.727881" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.728567" 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-25T23:58:36.728325" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.729045" 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-25T23:58:36.728754" elapsed="0.000336"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:36.729861" 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-25T23:58:36.729672" elapsed="0.000214"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:36.730234" 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-25T23:58:36.730062" elapsed="0.000197"/>
</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-25T23:58:36.730400" elapsed="0.000192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.730985" 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-25T23:58:36.730740" elapsed="0.000306"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:36.731088" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.731240" 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-25T23:58:36.729283" elapsed="0.001981"/>
</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-25T23:58:36.737491" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.737823" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11931&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.737957" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:36.733332" elapsed="0.004692"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.731334" elapsed="0.006758"/>
</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-25T23:58:36.738334" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.738128" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.731316" elapsed="0.007141"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.743272" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11931&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.739862" elapsed="0.003480"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.739561" elapsed="0.003900"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.739536" elapsed="0.003964"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.747032" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.743888" elapsed="0.003191"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.743580" elapsed="0.003534"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.743557" elapsed="0.003583"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.747674" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.747301" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.748020" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.747772" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.748560" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.748262" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.748106" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.747754" elapsed="0.000890"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.749176" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.748798" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.749500" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.749273" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.750073" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.749739" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.749586" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.749255" elapsed="0.000901"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.750299" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:36.751087" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.750796" elapsed="0.000318"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.751263" elapsed="0.002264"/>
</kw>
<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="PASS" start="2026-04-25T23:58:36.738934" elapsed="0.014657"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:36.753768" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:36.753663" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.753643" elapsed="0.000211"/>
</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-25T23:58:36.754014" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.754083" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.756334" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11931&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.726380" elapsed="0.029998"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.756518" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:36.756815" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11931&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.579829" elapsed="0.177067"/>
</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-25T23:58:36.757655" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.757116" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.757096" elapsed="0.000741"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.757887" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:36.758177" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11931&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:36.574395" elapsed="0.183810"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:36.758826" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b0fb060&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:36.758386" elapsed="0.000467"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.759423" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.759024" elapsed="0.000426"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.760022" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.759607" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.760735" elapsed="0.000625"/>
</kw>
<msg time="2026-04-25T23:58:36.761501" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:36.761546" level="INFO">${publish_count} = 11931</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.760209" elapsed="0.001360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.761930" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.761647" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.761628" elapsed="0.000528"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.762910" level="INFO">${publish_count} = 11931</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.762302" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.764279" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.763638" elapsed="0.000835">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:36.764624" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:36.764670" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.763118" elapsed="0.001575"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.765069" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.764770" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.764751" elapsed="0.000497"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.770828" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.765391" elapsed="0.005508"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:36.770954" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:58:36.771210" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:36.771255" level="INFO">${publ_count} = 11931</msg>
<msg time="2026-04-25T23:58:36.771296" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:36.571106" elapsed="0.200214"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.771486" elapsed="0.000239"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:36.771877" elapsed="0.006471"/>
</kw>
<var name="${index}">6</var>
<status status="PASS" start="2026-04-25T23:58:36.570701" elapsed="0.207690"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.780661" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.779894" elapsed="0.000850"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:36.780876" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:36.781164" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:36.779435" elapsed="0.001755"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.781895" level="INFO">&amp;{mapping} = { ID=working-pair-7 }</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-25T23:58:36.781393" elapsed="0.000530"/>
</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-25T23:58:36.818076" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.817684" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.818821" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.818586" elapsed="0.000301">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.818981" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.818260" elapsed="0.000765"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.819560" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.819184" elapsed="0.000402"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.819871" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.820030" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:36.819739" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.820446" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.820207" elapsed="0.000282"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.822513" level="INFO">mapping: {'ID': 'working-pair-7'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.822243" elapsed="0.000317"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.822983" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.822715" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.823670" level="INFO">${value} = working-pair-7</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:36.823372" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:36.824432" level="INFO">${encoded} = working-pair-7</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-25T23:58:36.824215" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:36.824509" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.824661" level="INFO">${encoded_value} = working-pair-7</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-25T23:58:36.823881" elapsed="0.000805"/>
</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-25T23:58:36.824834" elapsed="0.000247"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-7</var>
<status status="PASS" start="2026-04-25T23:58:36.823242" elapsed="0.001879"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.823074" elapsed="0.002082"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:36.825213" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.825369" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:36.820842" elapsed="0.004553"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.820558" elapsed="0.004868"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.825599" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.825450" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.820538" elapsed="0.005139"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.826270" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.825815" elapsed="0.000482"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.826346" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.817080" elapsed="0.009390"/>
</kw>
<msg time="2026-04-25T23:58:36.826556" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.805048" elapsed="0.021560"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.838503" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.850373" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.862163" 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-25T23:58:36.862352" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.862521" 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-25T23:58:36.862910" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.862737" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.862722" elapsed="0.000271"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.863144" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.863305" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.863464" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.862693" elapsed="0.000823"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.862593" elapsed="0.000949"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.863680" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.863756" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.863890" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:36.800741" elapsed="0.063189"/>
</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-25T23:58:36.888176" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.887753" elapsed="0.000484"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.888960" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:36.888733" elapsed="0.000308">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.889135" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.888399" elapsed="0.000760"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.889693" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:36.889314" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.890026" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:36.890156" 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-25T23:58:36.889875" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.890573" 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-25T23:58:36.890332" elapsed="0.000287"/>
</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-25T23:58:36.890969" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.890685" elapsed="0.000360"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.891499" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</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-25T23:58:36.891210" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.891069" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.890665" elapsed="0.000915"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.892291" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:36.891719" elapsed="0.000600"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.892369" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:36.887148" elapsed="0.005347"/>
</kw>
<msg time="2026-04-25T23:58:36.892549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.874769" elapsed="0.017831"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.904351" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.916090" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.927811" 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-25T23:58:36.928076" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.928248" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.928603" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.928464" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:36.928449" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.928816" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.928980" elapsed="0.000034"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.929157" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:36.928421" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.928321" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.929373" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.929447" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:36.929591" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:36.873779" elapsed="0.055854"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:36.931169" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.930911" elapsed="0.000320">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:36.931321" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:36.930578" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.931652" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.931415" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.932220" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.931903" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.931731" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.931396" elapsed="0.000905"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.934739" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.932445" elapsed="0.002321"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:36.934816" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:36.935020" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:36.930134" elapsed="0.004929"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.936809" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.936557" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.937261" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-25T23:58:36.937023" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.937740" 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-25T23:58:36.937495" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.938219" 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-25T23:58:36.937928" elapsed="0.000334"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:36.939076" 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-25T23:58:36.938852" elapsed="0.000250"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:36.939422" 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-25T23:58:36.939251" elapsed="0.000197"/>
</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-25T23:58:36.939590" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.940198" 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-25T23:58:36.939932" elapsed="0.000309"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:36.940282" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:36.940435" 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-25T23:58:36.938458" elapsed="0.002001"/>
</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-25T23:58:36.946650" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.946962" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11689&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.947145" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:36.942549" elapsed="0.004634"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.940529" elapsed="0.006718"/>
</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-25T23:58:36.947493" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.947283" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.940511" elapsed="0.007112"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.952255" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11689&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.949053" elapsed="0.003273"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.948726" elapsed="0.003648"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.948701" elapsed="0.003709"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.956087" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:36.952787" elapsed="0.003347"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.952486" elapsed="0.003683"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.952463" elapsed="0.003731"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.956728" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.956353" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.957072" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.956825" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.957614" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.957311" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.957155" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.956807" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.958229" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.957850" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.958549" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.958323" elapsed="0.000319"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.959159" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.958824" elapsed="0.000362"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:36.958668" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.958306" elapsed="0.000937"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:36.959387" elapsed="0.000344"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:36.960185" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:36.959888" elapsed="0.000323"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.960360" elapsed="0.002294"/>
</kw>
<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="PASS" start="2026-04-25T23:58:36.948130" elapsed="0.014588"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:36.962896" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:58:36.962790" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.962771" elapsed="0.000214"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.963176" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:36.963246" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:36.965491" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11689&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.935490" elapsed="0.030045"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.965676" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:36.965976" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11689&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.787757" elapsed="0.178324"/>
</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-25T23:58:36.966816" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.966272" elapsed="0.000647"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.966253" elapsed="0.000719"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:36.967038" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:36.967308" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11689&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:36.782342" elapsed="0.185014"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:36.968134" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a9e0b80&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:36.967535" elapsed="0.000626"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.968712" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.968312" elapsed="0.000427"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.969311" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.968889" elapsed="0.000448"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:36.970032" elapsed="0.000607"/>
</kw>
<msg time="2026-04-25T23:58:36.970774" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:36.970819" level="INFO">${publish_count} = 11689</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.969492" elapsed="0.001383"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.971283" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.970958" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.970935" elapsed="0.000522"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.972236" level="INFO">${publish_count} = 11689</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.971646" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:36.973595" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.972948" elapsed="0.000839">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:36.973927" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:36.973975" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:36.972426" elapsed="0.001586"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:36.974377" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:36.974091" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:36.974071" elapsed="0.000479"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.980179" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:36.974695" elapsed="0.005511"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:36.980260" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:36.980498" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:36.980543" level="INFO">${publ_count} = 11689</msg>
<msg time="2026-04-25T23:58:36.980584" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:36.778875" elapsed="0.201732"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:36.980773" elapsed="0.000258"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:36.981190" elapsed="0.006226"/>
</kw>
<var name="${index}">7</var>
<status status="PASS" start="2026-04-25T23:58:36.778499" elapsed="0.208957"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.989928" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:36.989176" elapsed="0.000853"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:36.990164" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:36.990432" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:36.988526" elapsed="0.001932"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.991137" level="INFO">&amp;{mapping} = { ID=working-pair-8 }</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-25T23:58:36.990617" elapsed="0.000548"/>
</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-25T23:58:37.027474" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.027100" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.028255" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.027995" elapsed="0.000327">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.028415" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.027666" elapsed="0.000772"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.028976" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.028595" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.029361" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.029505" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:37.029224" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.029922" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.029682" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.031117" level="INFO">mapping: {'ID': 'working-pair-8'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.030696" elapsed="0.000467"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.031579" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.031318" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.032261" level="INFO">${value} = working-pair-8</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:37.031946" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:37.032995" level="INFO">${encoded} = working-pair-8</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-25T23:58:37.032777" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:37.033086" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:37.033235" level="INFO">${encoded_value} = working-pair-8</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-25T23:58:37.032466" elapsed="0.000793"/>
</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-25T23:58:37.033405" elapsed="0.000225"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-8</var>
<status status="PASS" start="2026-04-25T23:58:37.031818" elapsed="0.001851"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.031653" elapsed="0.002050"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.033744" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:37.033895" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:37.030381" elapsed="0.003538"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.030088" elapsed="0.003863"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.034138" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.033980" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.030036" elapsed="0.004197"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.034800" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.034371" elapsed="0.000456"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.034876" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.026476" elapsed="0.008540"/>
</kw>
<msg time="2026-04-25T23:58:37.035071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.014320" elapsed="0.020803"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.046970" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.058789" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.070650" 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-25T23:58:37.070840" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.071028" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.071387" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.071247" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.071231" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.071606" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.071769" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.071960" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.071203" elapsed="0.000827"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.071103" elapsed="0.000954"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.072199" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.072275" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:37.072409" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:37.009941" elapsed="0.062508"/>
</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-25T23:58:37.096666" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.096292" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.097453" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.097237" elapsed="0.000279">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.097608" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.096849" elapsed="0.000784"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.098189" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:37.097790" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.098504" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.098626" 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-25T23:58:37.098371" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.099063" 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-25T23:58:37.098803" elapsed="0.000306"/>
</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-25T23:58:37.099502" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.099210" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.100037" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</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-25T23:58:37.099726" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.099585" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.099190" elapsed="0.000931"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.100786" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:37.100262" elapsed="0.000552"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.100863" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.095667" elapsed="0.005323"/>
</kw>
<msg time="2026-04-25T23:58:37.101060" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.083237" elapsed="0.017894"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.112870" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.124689" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.136669" 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-25T23:58:37.136860" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.137047" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.137412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.137273" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.137257" elapsed="0.000239"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.137630" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.137789" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.137947" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.137221" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.137122" elapsed="0.000923"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.138185" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.138312" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:58:37.138454" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:37.082258" elapsed="0.056239"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.140037" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.139781" elapsed="0.000330">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.140204" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.139445" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.140543" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.140299" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.141098" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.140788" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.140623" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.140280" elapsed="0.000899"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.143714" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.141322" elapsed="0.002419"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:37.143792" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:37.143976" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:37.138970" elapsed="0.005073"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.145782" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.145532" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.146230" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-25T23:58:37.145978" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.146656" 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-25T23:58:37.146419" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.147126" 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-25T23:58:37.146842" elapsed="0.000329"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:37.147947" 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-25T23:58:37.147760" elapsed="0.000217"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:37.148325" 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-25T23:58:37.148152" elapsed="0.000199"/>
</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-25T23:58:37.148493" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.149102" 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-25T23:58:37.148838" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:37.149187" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.149341" 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-25T23:58:37.147364" elapsed="0.002002"/>
</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-25T23:58:37.155437" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.155749" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10759&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.155849" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:37.151454" elapsed="0.004420"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.149435" elapsed="0.006485"/>
</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-25T23:58:37.156117" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.155946" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.149417" elapsed="0.006791"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.160918" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10759&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.157520" elapsed="0.003473"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.157220" elapsed="0.003845"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.157193" elapsed="0.003908"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.164635" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.161478" elapsed="0.003203"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.161179" elapsed="0.003536"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.161155" elapsed="0.003585"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.165293" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.164897" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.165624" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.165390" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.166181" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.165862" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.165706" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.165371" elapsed="0.000893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.166775" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.166417" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.167115" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.166871" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.167646" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.167352" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.167198" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.166852" elapsed="0.000876"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.167871" elapsed="0.000375"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:37.168677" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.168404" elapsed="0.000299"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.168851" elapsed="0.002298"/>
</kw>
<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="PASS" start="2026-04-25T23:58:37.156592" elapsed="0.014622"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:37.171393" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:37.171287" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.171267" elapsed="0.000211"/>
</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-25T23:58:37.171619" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.171686" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:37.173964" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10759&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.144471" elapsed="0.029559"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.174209" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:37.174510" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10759&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:36.996920" elapsed="0.177671"/>
</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-25T23:58:37.175346" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.174784" elapsed="0.000663"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.174764" elapsed="0.000733"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.175550" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:37.175818" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10759&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:36.991446" elapsed="0.184401"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:37.176479" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b0530b0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:37.176024" elapsed="0.000482"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.177077" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.176658" elapsed="0.000446"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.177651" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.177255" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.178380" elapsed="0.000637"/>
</kw>
<msg time="2026-04-25T23:58:37.179158" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:37.179204" level="INFO">${publish_count} = 10759</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.177834" elapsed="0.001393"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.179590" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.179306" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.179286" elapsed="0.000480"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.180504" level="INFO">${publish_count} = 10759</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.179913" elapsed="0.000621"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.181889" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.181266" elapsed="0.000830">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:37.182239" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:37.182284" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.180725" elapsed="0.001582"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.182662" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.182384" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.182365" elapsed="0.000471"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.188421" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.182984" elapsed="0.005466"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:37.188504" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:58:37.188796" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:37.188842" level="INFO">${publ_count} = 10759</msg>
<msg time="2026-04-25T23:58:37.188887" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:36.987949" elapsed="0.200998"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.189133" elapsed="0.000242"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:37.189530" elapsed="0.006248"/>
</kw>
<var name="${index}">8</var>
<status status="PASS" start="2026-04-25T23:58:36.987567" elapsed="0.208253"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.198187" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.197337" elapsed="0.000931"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:37.198399" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:37.198664" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:37.196833" elapsed="0.001858"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.199373" level="INFO">&amp;{mapping} = { ID=working-pair-9 }</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-25T23:58:37.198849" elapsed="0.000552"/>
</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-25T23:58:37.235588" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.235212" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.236354" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.236115" elapsed="0.000306">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.236514" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.235772" elapsed="0.000767"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.237098" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.236697" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.237417" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.237583" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:37.237281" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.238020" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.237759" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.239199" level="INFO">mapping: {'ID': 'working-pair-9'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.238743" elapsed="0.000503"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.239666" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.239403" elapsed="0.000289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.240357" level="INFO">${value} = working-pair-9</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:37.240057" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:37.241125" level="INFO">${encoded} = working-pair-9</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-25T23:58:37.240875" elapsed="0.000277"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:37.241203" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.241353" level="INFO">${encoded_value} = working-pair-9</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-25T23:58:37.240564" elapsed="0.000814"/>
</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-25T23:58:37.241582" elapsed="0.000368"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-9</var>
<status status="PASS" start="2026-04-25T23:58:37.239910" elapsed="0.002135"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.239742" elapsed="0.002340"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.242126" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.242285" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:37.238425" elapsed="0.003885"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.238137" elapsed="0.004205"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.242512" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.242367" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.238117" elapsed="0.004473"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.243182" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.242727" elapsed="0.000482"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.243279" elapsed="0.000033"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.234577" elapsed="0.008833"/>
</kw>
<msg time="2026-04-25T23:58:37.243463" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.222555" elapsed="0.020959"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.255338" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.267130" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.278889" 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-25T23:58:37.279092" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.279262" 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-25T23:58:37.279616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.279478" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.279463" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.279828" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.279995" elapsed="0.000035"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.280171" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.279435" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.279334" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.280426" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.280503" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:37.280639" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:37.218245" elapsed="0.062434"/>
</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-25T23:58:37.304819" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.304442" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.305680" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.305350" elapsed="0.000393">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.305837" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.305022" elapsed="0.000838"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.306462" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:37.306081" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.306775" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.306900" 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-25T23:58:37.306642" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.307337" 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-25T23:58:37.307097" elapsed="0.000285"/>
</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-25T23:58:37.307734" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.307450" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.308263" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</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-25T23:58:37.307954" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.307816" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.307429" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.309032" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:37.308485" elapsed="0.000577"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.309111" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.303820" elapsed="0.005415"/>
</kw>
<msg time="2026-04-25T23:58:37.309287" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.291554" elapsed="0.017783"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.321122" elapsed="0.000060"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.332966" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.344754" 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-25T23:58:37.344940" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.345126" 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-25T23:58:37.345479" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.345341" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.345326" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.345690" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.345849" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.346024" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.345298" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.345199" elapsed="0.000904"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.346241" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.346315" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:37.346456" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:37.290565" elapsed="0.055935"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.348039" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.347751" elapsed="0.000353">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.348195" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.347414" elapsed="0.000805"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.348531" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.348287" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.349126" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.348812" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.348643" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.348269" elapsed="0.000940"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.352579" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.349355" elapsed="0.003251"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:37.352657" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.352835" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:37.346941" elapsed="0.005934"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.354630" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.354376" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.355075" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-25T23:58:37.354820" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.355509" 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-25T23:58:37.355265" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.355933" 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-25T23:58:37.355696" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:37.356815" 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-25T23:58:37.356625" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:37.357181" 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-25T23:58:37.356992" elapsed="0.000214"/>
</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-25T23:58:37.357348" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.357931" 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-25T23:58:37.357689" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:37.358033" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.358188" 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-25T23:58:37.356232" elapsed="0.001980"/>
</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-25T23:58:37.364614" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.364921" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10517&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.365100" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:37.360285" elapsed="0.004852"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.358282" elapsed="0.006919"/>
</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-25T23:58:37.365443" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.365237" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.358264" elapsed="0.007302"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.370358" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10517&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.367142" elapsed="0.003286"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.366813" elapsed="0.003664"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.366788" elapsed="0.003726"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.374082" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.370888" elapsed="0.003242"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.370591" elapsed="0.003573"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.370567" elapsed="0.003655"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.374768" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.374385" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.375117" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.374866" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.375659" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.375359" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.375201" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.374847" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.376286" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.375902" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.376607" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.376382" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.377178" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.376841" elapsed="0.000363"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.376688" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.376363" elapsed="0.000898"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.377404" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:37.378200" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.377906" elapsed="0.000320"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.378374" elapsed="0.002436"/>
</kw>
<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="PASS" start="2026-04-25T23:58:37.366208" elapsed="0.014665"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:37.381072" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:37.380945" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.380926" elapsed="0.000232"/>
</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-25T23:58:37.381334" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.381404" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:37.383634" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10517&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.353320" elapsed="0.030358"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.383816" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:37.384142" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10517&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.205212" elapsed="0.179011"/>
</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-25T23:58:37.384960" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.384413" elapsed="0.000665"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.384393" elapsed="0.000734"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.385176" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:37.385460" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10517&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:37.199754" elapsed="0.185768"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:37.386146" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b052570&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:37.385684" elapsed="0.000490"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.386755" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.386327" elapsed="0.000454"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.387351" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.386932" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.388083" elapsed="0.000603"/>
</kw>
<msg time="2026-04-25T23:58:37.388821" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:37.388865" level="INFO">${publish_count} = 10517</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.387538" elapsed="0.001349"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.389302" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.388967" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.388944" elapsed="0.000551"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.390398" level="INFO">${publish_count} = 10517</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.389721" elapsed="0.000706"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.392017" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.391268" elapsed="0.000959">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:37.392386" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:37.392439" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.390617" elapsed="0.001844"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.392822" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.392538" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.392518" elapsed="0.000565"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.398738" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.393234" elapsed="0.005531"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:37.398821" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:37.399080" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:37.399125" level="INFO">${publ_count} = 10517</msg>
<msg time="2026-04-25T23:58:37.399167" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:37.196326" elapsed="0.202864"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.399355" elapsed="0.000242"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:37.399755" elapsed="0.005811"/>
</kw>
<var name="${index}">9</var>
<status status="PASS" start="2026-04-25T23:58:37.195929" elapsed="0.209678"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.408096" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.407333" elapsed="0.000846"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:37.408313" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.408586" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:37.406852" elapsed="0.001760"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.409296" level="INFO">&amp;{mapping} = { ID=working-pair-10 }</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-25T23:58:37.408772" elapsed="0.000552"/>
</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-25T23:58:37.446305" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.445910" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.447083" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.446822" elapsed="0.000330">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.447245" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.446492" elapsed="0.000778"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.447813" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.447426" elapsed="0.000415"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.448179" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.448326" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:37.448014" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.448745" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.448503" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.449735" level="INFO">mapping: {'ID': 'working-pair-10'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.449482" elapsed="0.000297"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.450214" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.449932" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.450879" level="INFO">${value} = working-pair-10</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:37.450586" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:37.451626" level="INFO">${encoded} = working-pair-10</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-25T23:58:37.451412" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:37.451701" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:37.451850" level="INFO">${encoded_value} = working-pair-10</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-25T23:58:37.451103" elapsed="0.000771"/>
</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-25T23:58:37.452037" elapsed="0.000230"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-10</var>
<status status="PASS" start="2026-04-25T23:58:37.450456" elapsed="0.001866"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.450289" elapsed="0.002068"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.452399" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:37.452553" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:37.449169" elapsed="0.003408"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.448858" elapsed="0.003750"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.452776" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.452634" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.448838" elapsed="0.004014"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.453442" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.452991" elapsed="0.000481"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.453521" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.445305" elapsed="0.008338"/>
</kw>
<msg time="2026-04-25T23:58:37.453729" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.433082" elapsed="0.020702"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.465806" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.477620" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.489432" 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-25T23:58:37.489622" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.489792" 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-25T23:58:37.490196" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.490056" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.490040" 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-25T23:58:37.490408" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.490574" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.490733" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.489998" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.489865" elapsed="0.000945"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.490947" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.491040" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:37.491175" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:37.428728" elapsed="0.062487"/>
</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-25T23:58:37.515072" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.514659" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.515800" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.515577" elapsed="0.000285">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.516016" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.515256" elapsed="0.000787"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.516582" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:37.516202" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.516896" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.517117" 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-25T23:58:37.516763" elapsed="0.000383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.517541" 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-25T23:58:37.517299" elapsed="0.000289"/>
</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-25T23:58:37.517954" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.517655" elapsed="0.000386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.518502" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</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-25T23:58:37.518210" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.518068" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.517635" elapsed="0.000950"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.519306" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:37.518730" elapsed="0.000605"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.519385" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.514064" elapsed="0.005452"/>
</kw>
<msg time="2026-04-25T23:58:37.519569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.502047" elapsed="0.017576"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.531721" elapsed="0.000056"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.543591" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.555486" 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-25T23:58:37.555706" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.555877" 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-25T23:58:37.556249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.556112" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.556097" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.556459" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.556619" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.556779" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.556068" elapsed="0.000807"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.555950" elapsed="0.000951"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.557056" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.557133" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:37.557274" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:37.501062" elapsed="0.056255"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.558809" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.558567" elapsed="0.000306">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.558968" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.558226" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.559324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.559081" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.559859" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.559568" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.559405" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.559062" elapsed="0.000880"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.562260" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.560109" elapsed="0.002178"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:37.562338" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.562515" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:37.557754" elapsed="0.004800"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.564321" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.564067" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.564748" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-25T23:58:37.564512" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.565223" 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-25T23:58:37.564937" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.565646" 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-25T23:58:37.565411" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:37.566530" 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-25T23:58:37.566339" elapsed="0.000217"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:37.566877" 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-25T23:58:37.566704" elapsed="0.000199"/>
</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-25T23:58:37.567064" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.567654" 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-25T23:58:37.567410" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:37.567741" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.567897" 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-25T23:58:37.565920" elapsed="0.002002"/>
</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-25T23:58:37.574180" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.574414" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10980&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.574542" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:37.570205" elapsed="0.004373"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.567998" elapsed="0.006645"/>
</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-25T23:58:37.574885" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.574679" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.567978" elapsed="0.007060"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.579726" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10980&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.576489" elapsed="0.003306"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.576189" elapsed="0.003655"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.576163" elapsed="0.003716"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.583213" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.580281" elapsed="0.002977"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.579960" elapsed="0.003333"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.579933" elapsed="0.003384"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.583844" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.583474" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.584191" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.583941" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.584725" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.584429" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.584274" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.583922" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.585340" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.584963" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.585666" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.585437" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.586231" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.585901" elapsed="0.000356"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.585748" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.585418" elapsed="0.000896"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.586495" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:37.587299" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.587019" elapsed="0.000307"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.587476" elapsed="0.002277"/>
</kw>
<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="PASS" start="2026-04-25T23:58:37.575542" elapsed="0.014276"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:37.590018" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-25T23:58:37.589893" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.589873" elapsed="0.000234"/>
</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-25T23:58:37.590252" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.590348" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:37.592580" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10980&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.562985" elapsed="0.029642"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.592768" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T23:58:37.593096" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10980&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.415575" elapsed="0.177604"/>
</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-25T23:58:37.593914" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.593372" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.593352" elapsed="0.000733"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.594135" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:37.594404" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10980&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:37.409607" elapsed="0.184846"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:37.595070" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ab794e0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:37.594614" elapsed="0.000484"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.595648" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.595248" elapsed="0.000427"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.596246" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.595826" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.596950" elapsed="0.000623"/>
</kw>
<msg time="2026-04-25T23:58:37.597710" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:37.597755" level="INFO">${publish_count} = 10980</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.596430" elapsed="0.001348"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.598174" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.597856" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.597837" elapsed="0.000549"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.599160" level="INFO">${publish_count} = 10980</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.598534" elapsed="0.000654"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.600518" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.599872" elapsed="0.000832">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:37.600847" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:37.600892" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.599350" elapsed="0.001565"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.601294" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.601011" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.600978" elapsed="0.000492"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.607307" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.601615" elapsed="0.005720"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:37.607390" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:37.607634" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:37.607680" level="INFO">${publ_count} = 10980</msg>
<msg time="2026-04-25T23:58:37.607722" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:37.406340" elapsed="0.201404"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.607907" elapsed="0.000260"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:37.608321" elapsed="0.006037"/>
</kw>
<var name="${index}">10</var>
<status status="PASS" start="2026-04-25T23:58:37.405717" elapsed="0.208682"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.616646" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.615895" elapsed="0.000831"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:37.616856" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.617141" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:37.615438" elapsed="0.001730"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.617826" level="INFO">&amp;{mapping} = { ID=working-pair-11 }</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-25T23:58:37.617326" elapsed="0.000527"/>
</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-25T23:58:37.654494" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.654108" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.655287" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.655050" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.655445" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.654704" elapsed="0.000765"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.656023" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.655630" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.656337" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.656483" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:37.656204" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.656946" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.656701" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.657974" level="INFO">mapping: {'ID': 'working-pair-11'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.657717" elapsed="0.000317"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.658444" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.658187" elapsed="0.000283"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.659122" level="INFO">${value} = working-pair-11</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:37.658809" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:37.659890" level="INFO">${encoded} = working-pair-11</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-25T23:58:37.659675" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:37.659967" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:58:37.660134" level="INFO">${encoded_value} = working-pair-11</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-25T23:58:37.659325" elapsed="0.000834"/>
</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-25T23:58:37.660302" elapsed="0.000226"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-11</var>
<status status="PASS" start="2026-04-25T23:58:37.658682" elapsed="0.001887"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.658518" elapsed="0.002085"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.660645" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:58:37.660797" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:37.657402" elapsed="0.003420"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.657082" elapsed="0.003771"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.661037" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.660878" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.657061" elapsed="0.004053"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.661699" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.661251" elapsed="0.000475"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.661773" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.653484" elapsed="0.008412"/>
</kw>
<msg time="2026-04-25T23:58:37.661948" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.641189" elapsed="0.020828"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.674111" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.685988" elapsed="0.000041"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.697849" 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-25T23:58:37.698094" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.698267" 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-25T23:58:37.698626" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.698486" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.698471" elapsed="0.000236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.698842" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.699053" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.699218" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.698442" elapsed="0.000829"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.698341" elapsed="0.000956"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.699437" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.699526" elapsed="0.000020"/>
</return>
<msg time="2026-04-25T23:58:37.699676" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:37.636891" elapsed="0.062826"/>
</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-25T23:58:37.723705" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.723336" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.724493" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.724264" elapsed="0.000297">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.724651" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.723888" elapsed="0.000790"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.725232" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:37.724834" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.725541" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.725763" 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-25T23:58:37.725410" elapsed="0.000381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.726205" 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-25T23:58:37.725940" elapsed="0.000310"/>
</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-25T23:58:37.726596" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.726316" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.727123" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</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-25T23:58:37.726816" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.726679" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.726297" elapsed="0.000907"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.727908" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:37.727341" elapsed="0.000596"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.727992" elapsed="0.000046"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.722719" elapsed="0.005417"/>
</kw>
<msg time="2026-04-25T23:58:37.728189" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.710539" elapsed="0.017730"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.740254" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.752095" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.763885" elapsed="0.000026"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.764088" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.764257" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.764604" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.764468" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.764453" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.764814" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.764977" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.765150" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.764426" elapsed="0.000777"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.764329" elapsed="0.000899"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.765363" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.765437" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:37.765576" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:37.709549" elapsed="0.056068"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.767185" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.766931" elapsed="0.000317">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.767338" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.766598" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.767709" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.767431" elapsed="0.000334"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.768257" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.767950" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.767789" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.767412" elapsed="0.000926"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.770589" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.768481" elapsed="0.002134"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:37.770665" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.770841" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:37.766151" elapsed="0.004730"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.772673" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.772425" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.773117" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-25T23:58:37.772863" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.773543" 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-25T23:58:37.773305" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.773961" 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-25T23:58:37.773726" elapsed="0.000292"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:37.774818" 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-25T23:58:37.774629" elapsed="0.000214"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:37.775196" 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-25T23:58:37.774995" elapsed="0.000226"/>
</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-25T23:58:37.775362" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.775949" 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-25T23:58:37.775706" elapsed="0.000293"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:37.776061" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.776216" 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-25T23:58:37.774235" elapsed="0.002005"/>
</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-25T23:58:37.782561" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.782825" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10929&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.782921" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:37.778487" elapsed="0.004459"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.776309" elapsed="0.006705"/>
</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-25T23:58:37.783190" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.783042" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.776292" elapsed="0.007019"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.787923" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10929&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.784698" elapsed="0.003317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.784356" elapsed="0.003710"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.784331" elapsed="0.003770"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.792053" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.788477" elapsed="0.003630"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.788178" elapsed="0.003967"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.788154" elapsed="0.004019"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.792830" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.792378" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.793238" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.792937" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.793890" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.793545" elapsed="0.000379"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.793334" elapsed="0.000635"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.792915" elapsed="0.001078"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.794625" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.794208" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.795028" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.794731" elapsed="0.000366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.795683" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.795349" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.795155" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.794711" elapsed="0.001069"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.795950" elapsed="0.000425"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:37.796903" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.796578" elapsed="0.000353"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.797130" elapsed="0.002430"/>
</kw>
<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="PASS" start="2026-04-25T23:58:37.783732" elapsed="0.015891"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:37.799801" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:58:37.799695" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.799676" elapsed="0.000210"/>
</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-25T23:58:37.800046" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.800116" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:37.802347" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10929&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.771328" elapsed="0.031064"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.802530" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T23:58:37.802824" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10929&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.623777" elapsed="0.179161"/>
</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-25T23:58:37.803741" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.803160" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.803139" elapsed="0.000753"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.803941" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:37.804233" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;10929&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:37.618247" elapsed="0.186015"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:37.804869" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aaf87c0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:37.804423" elapsed="0.000473"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.805474" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.805069" elapsed="0.000431"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.806074" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.805653" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:37.806782" elapsed="0.000629"/>
</kw>
<msg time="2026-04-25T23:58:37.807550" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:37.807630" level="INFO">${publish_count} = 10929</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.806257" elapsed="0.001401"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.808064" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.807737" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.807718" elapsed="0.000520"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.808949" level="INFO">${publish_count} = 10929</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.808384" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:37.810439" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.809719" elapsed="0.000912">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:37.810774" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:37.810819" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:37.809162" elapsed="0.001680"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.811219" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.810918" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.810899" elapsed="0.000496"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.817110" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.811539" elapsed="0.005598"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:37.817188" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.817424" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:37.817469" level="INFO">${publ_count} = 10929</msg>
<msg time="2026-04-25T23:58:37.817510" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:37.614884" elapsed="0.202649"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.817693" elapsed="0.000235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:37.818125" elapsed="0.005921"/>
</kw>
<var name="${index}">11</var>
<status status="PASS" start="2026-04-25T23:58:37.614507" elapsed="0.209619"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.826525" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.825632" elapsed="0.000975"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:58:37.826740" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:37.827025" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:58:37.825169" elapsed="0.001883"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.827710" level="INFO">&amp;{mapping} = { ID=working-pair-12 }</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-25T23:58:37.827211" elapsed="0.000527"/>
</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-25T23:58:37.865225" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.864834" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.866026" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.865741" elapsed="0.000352">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.866187" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.865411" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.866755" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.866372" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.867094" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.867242" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:58:37.866938" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.867665" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.867419" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.868657" level="INFO">mapping: {'ID': 'working-pair-12'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.868403" elapsed="0.000299"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.869137" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:58:37.868855" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.869800" level="INFO">${value} = working-pair-12</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-25T23:58:37.869505" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-25T23:58:37.870578" level="INFO">${encoded} = working-pair-12</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-25T23:58:37.870356" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-25T23:58:37.870653" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:58:37.870803" level="INFO">${encoded_value} = working-pair-12</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-25T23:58:37.870043" elapsed="0.000785"/>
</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-25T23:58:37.870978" elapsed="0.000246"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-12</var>
<status status="PASS" start="2026-04-25T23:58:37.869375" elapsed="0.001889"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.869211" elapsed="0.002088"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:58:37.871341" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:58:37.871496" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:58:37.868084" elapsed="0.003438"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.867778" elapsed="0.003776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.871724" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.871579" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.867759" elapsed="0.004084"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.872440" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:37.871987" elapsed="0.000482"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.872522" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.864225" elapsed="0.008421"/>
</kw>
<msg time="2026-04-25T23:58:37.872700" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.850922" elapsed="0.021830"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.884731" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.896600" elapsed="0.000035"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.908433" 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-25T23:58:37.908623" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.908793" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.909170" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.909029" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.909013" 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-25T23:58:37.909387" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.909552" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.909713" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.908970" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.908866" elapsed="0.000927"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.909934" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.910028" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:58:37.910163" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-25T23:58:37.846686" elapsed="0.063519"/>
</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-25T23:58:37.934233" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.933845" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.934962" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-25T23:58:37.934736" elapsed="0.000306">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.935135" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.934415" elapsed="0.000744"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.935694" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-25T23:58:37.935317" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.936023" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:58:37.936159" 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-25T23:58:37.935872" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.936601" 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-25T23:58:37.936335" elapsed="0.000311"/>
</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-25T23:58:37.937011" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.936712" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.937525" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</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-25T23:58:37.937234" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.937095" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.936693" elapsed="0.000913"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.938280" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:37.937743" elapsed="0.000566"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:58:37.938357" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:58:37.933247" elapsed="0.005233"/>
</kw>
<msg time="2026-04-25T23:58:37.938530" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:37.921138" elapsed="0.017442"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.950712" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.962564" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.974434" 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-25T23:58:37.974623" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.974790" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.975160" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.975020" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:58:37.974989" elapsed="0.000249"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.975369" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.975528" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.975685" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:58:37.974961" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.974861" elapsed="0.000901"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.975899" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:58:37.975976" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:58:37.976132" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:37.920150" elapsed="0.056024"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:58:37.977652" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.977413" elapsed="0.000300">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:58:37.977804" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:58:37.977078" elapsed="0.000750"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:37.978174" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.977896" elapsed="0.000337"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.978709" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:37.978418" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.978257" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.977878" elapsed="0.000913"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.981068" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:37.978934" elapsed="0.002160"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:58:37.981145" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:37.981323" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:58:37.976608" elapsed="0.004754"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.983173" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.982897" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.983641" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-25T23:58:37.983402" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.984093" 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-25T23:58:37.983832" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.984517" 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-25T23:58:37.984281" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-25T23:58:37.985354" 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-25T23:58:37.985163" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-25T23:58:37.985700" 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-25T23:58:37.985529" elapsed="0.000196"/>
</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-25T23:58:37.985868" elapsed="0.000215"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.986497" 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-25T23:58:37.986234" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-25T23:58:37.986583" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:58:37.986739" 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-25T23:58:37.984752" elapsed="0.002012"/>
</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-25T23:58:37.993563" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.993791" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '141'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11309&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.993898" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-25T23:58:37.989049" elapsed="0.004876"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.986832" elapsed="0.007145"/>
</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-25T23:58:37.994176" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:37.994024" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.986815" elapsed="0.007451"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.997615" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11309&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.995321" elapsed="0.002344"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.995103" elapsed="0.002597"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.995084" elapsed="0.002642"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.000666" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:58:37.998016" elapsed="0.002716"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:37.997782" elapsed="0.002999"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:37.997765" elapsed="0.003051"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.001578" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.001056" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.002059" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.001716" elapsed="0.000426"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.002812" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:38.002393" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:38.002176" elapsed="0.000724"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.001690" elapsed="0.001240"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.003690" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.003184" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.004228" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.003878" elapsed="0.000433"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.004987" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:38.004563" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-04-25T23:58:38.004346" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.003850" elapsed="0.001275"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:58:38.005327" elapsed="0.000492"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:58:38.006454" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.006068" elapsed="0.000423"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:38.006701" elapsed="0.002573"/>
</kw>
<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="PASS" start="2026-04-25T23:58:37.994621" elapsed="0.014719"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-25T23:58:38.009522" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:58:38.009414" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.009394" elapsed="0.000214"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.009751" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:58:38.009820" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:58:38.012095" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11309&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.981787" elapsed="0.030354"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:38.012281" elapsed="0.000072"/>
</return>
<msg time="2026-04-25T23:58:38.012581" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11309&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-25T23:58:37.833671" elapsed="0.178992"/>
</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-25T23:58:38.013422" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.012853" elapsed="0.000668"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.012833" elapsed="0.000737"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:58:38.013619" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:58:38.013886" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;11309&lt;/publish-count&gt;&lt;active&gt;true&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-25T23:58:37.828038" elapsed="0.185877"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-25T23:58:38.014530" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0cafb5b0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-25T23:58:38.014094" elapsed="0.000463"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:38.015128" level="INFO">${active} = true</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:38.014708" elapsed="0.000447"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.015744" level="INFO">${active} = True</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-25T23:58:38.015308" elapsed="0.000463"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-25T23:58:38.016469" elapsed="0.000634"/>
</kw>
<msg time="2026-04-25T23:58:38.017279" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:38.017326" level="INFO">${publish_count} = 11309</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:38.015928" elapsed="0.001422"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.017750" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.017428" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.017409" elapsed="0.000533"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.018729" level="INFO">${publish_count} = 11309</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:38.018139" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-25T23:58:38.020186" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.019503" elapsed="0.000874">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-25T23:58:38.020519" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:38.020564" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:38.018919" elapsed="0.001668"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.020949" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.020664" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.020645" elapsed="0.000503"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.026933" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:58:38.021293" elapsed="0.005670"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-25T23:58:38.027029" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:58:38.027269" level="INFO">${active} = True</msg>
<msg time="2026-04-25T23:58:38.027314" level="INFO">${publ_count} = 11309</msg>
<msg time="2026-04-25T23:58:38.027354" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-25T23:58:37.824645" elapsed="0.202731"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:58:38.027541" elapsed="0.000236"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:58:38.027952" elapsed="0.005892"/>
</kw>
<var name="${index}">12</var>
<status status="PASS" start="2026-04-25T23:58:37.824267" elapsed="0.209618"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-25T23:58:35.484992" elapsed="2.548927"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-25T23:58:38.033972" elapsed="0.000235"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-25T23:58:35.484291" elapsed="2.550021"/>
</kw>
<msg time="2026-04-25T23:58:38.034399" level="INFO">${result} = [True, True, True, True, True, True, True, True, True, True, True, True]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-25T23:58:35.483786" elapsed="2.550641"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:58:38.034476" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-25T23:58:35.482833" elapsed="2.551768"/>
</kw>
<msg time="2026-04-25T23:58:38.034698" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:58:38.034747" level="INFO">${message} = [True, True, True, True, True, True, True, True, True, True, True, True]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:35.482321" elapsed="2.552449"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.034933" elapsed="0.036521"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-25T23:58:38.072452" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-25T23:58:38.072319" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.072296" elapsed="0.000247"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.072698" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [True, True, True, True, True, True, True, True, True, True, True, True].</doc>
<status status="PASS" start="2026-04-25T23:58:38.071886" elapsed="0.000895"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:58:38.072824" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:58:38.072982" level="INFO">${data} = [True, True, True, True, True, True, True, True, True, True, True, True]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-25T23:58:35.481891" elapsed="2.591134"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.075465" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-25T23:58:38.075512" level="INFO">${args} = ['data_holder']</msg>
<msg time="2026-04-25T23:58:38.075556" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:58:38.075157" elapsed="0.000422"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-25T23:58:38.075731" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.077689" level="FAIL">False != True</msg>
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.077131" elapsed="0.000627">False != True</status>
</kw>
<var name="${active}">True</var>
<status status="FAIL" start="2026-04-25T23:58:38.076985" elapsed="0.000863">False != True</status>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="FAIL" start="2026-04-25T23:58:38.076848" elapsed="0.001059">False != True</status>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="FAIL" start="2026-04-25T23:58:38.076585" elapsed="0.001451">False != True</status>
</kw>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.076120" elapsed="0.001968">False != True</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-25T23:58:38.078147" elapsed="0.000017"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.074764" elapsed="0.003483">False != True</status>
</kw>
<msg time="2026-04-25T23:58:38.078350" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:38.078394" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:38.074247" elapsed="0.004170"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.078581" elapsed="0.033163"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="NOT RUN" start="2026-04-25T23:58:38.112803" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:38.112668" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.112645" elapsed="0.000228"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.113405" level="FAIL">False != True</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.113050" elapsed="0.000425">False != True</status>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If FAIL is PASS do nothing. Otherwise Fail with False != True.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.112262" elapsed="0.001323">False != True</status>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:58:38.113641" elapsed="0.000017"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.073793" elapsed="0.039945">False != True</status>
</kw>
<msg time="2026-04-25T23:58:38.113849" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:58:38.113892" level="INFO">${message} = False != True</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:58:38.073192" elapsed="0.040724"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:58:38.114124" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:58:38.114014" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.113981" elapsed="0.000208"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:58:38.115133" level="INFO">${date_now} = 2026-04-25 23:58:38.115</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:58:38.114939" elapsed="0.000222"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-25T23:58:38.115944" level="INFO">${time_deadline} = 1017.364</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-25T23:58:38.115365" elapsed="0.000609"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.116533" level="INFO">${time_minimal} = 600.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:58:38.116149" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:58:38.116867" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:58:38.116630" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:58:38.116611" elapsed="0.000334"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-25T23:58:38.114405" elapsed="0.002605"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.117720" level="INFO">Slept 10 minutes.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-25T23:58:38.117159" elapsed="600.000867"/>
</kw>
<var name="${i}">0.0</var>
<status status="PASS" start="2026-04-25T23:58:35.481687" elapsed="602.636459"/>
</iter>
<iter>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.123109" level="INFO">${keyword} = Get_Notifications_Active_Status</msg>
<msg time="2026-04-26T00:08:38.123374" level="INFO">${args} = ['1', 12]</msg>
<msg time="2026-04-26T00:08:38.123478" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.122377" elapsed="0.001154"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Notifications_Active_Status" owner="DnbCommons">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.126503" level="INFO">${active_list} = []</msg>
<var>${active_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:08:38.125929" elapsed="0.000634"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.130457" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.129683" elapsed="0.000858"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:38.130676" elapsed="0.000042"/>
</return>
<msg time="2026-04-26T00:08:38.130977" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:38.129217" elapsed="0.001788"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.131682" 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-26T00:08:38.131168" elapsed="0.000542"/>
</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-26T00:08:38.168206" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.167753" elapsed="0.000487"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.169051" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.168742" elapsed="0.000392">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.169230" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.168408" elapsed="0.000848"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.169803" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.169417" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.170146" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.170316" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:38.170004" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.170751" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.170497" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.171781" 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-26T00:08:38.171525" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.172283" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.171998" elapsed="0.000311"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.172977" 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-26T00:08:38.172664" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:38.173720" 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-26T00:08:38.173502" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:38.173799" elapsed="0.000034"/>
</return>
<msg time="2026-04-26T00:08:38.173956" 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-26T00:08:38.173189" elapsed="0.000811"/>
</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-26T00:08:38.174149" elapsed="0.000238"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-26T00:08:38.172534" elapsed="0.001893"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.172362" elapsed="0.002100"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.174569" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.174733" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:38.171209" elapsed="0.003550"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.170873" elapsed="0.003919"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.174980" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.174818" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.170850" elapsed="0.004210"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.175647" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.175201" elapsed="0.000474"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.175724" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.167120" elapsed="0.008729"/>
</kw>
<msg time="2026-04-26T00:08:38.175902" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.154772" elapsed="0.021183"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.188188" elapsed="0.000034"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.200047" elapsed="0.000052"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.212051" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.212298" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.212484" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.212889" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.212741" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.212724" elapsed="0.000264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.213130" 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-26T00:08:38.213294" 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-26T00:08:38.213457" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.212687" elapsed="0.000824"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.212567" elapsed="0.000970"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.213679" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.213838" elapsed="0.000019"/>
</return>
<msg time="2026-04-26T00:08:38.214065" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:38.150501" elapsed="0.063610"/>
</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-26T00:08:38.238395" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.237998" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.239202" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.238923" elapsed="0.000354">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.239373" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.238592" elapsed="0.000806"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.239944" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:38.239560" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.240318" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.240479" 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-26T00:08:38.240148" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.240927" 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-26T00:08:38.240681" elapsed="0.000310"/>
</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-26T00:08:38.241382" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.241067" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.241901" 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-26T00:08:38.241610" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.241468" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.241043" elapsed="0.000960"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.242691" 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-26T00:08:38.242147" elapsed="0.000573"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.242773" elapsed="0.000033"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.237359" elapsed="0.005545"/>
</kw>
<msg time="2026-04-26T00:08:38.242980" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.225140" elapsed="0.017895"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.255093" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.267062" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.278884" 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-26T00:08:38.279115" 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-26T00:08:38.279298" 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-26T00:08:38.279696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.279551" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.279534" elapsed="0.000243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.279915" 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-26T00:08:38.280099" 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-26T00:08:38.280263" elapsed="0.000049"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.279497" elapsed="0.000850"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.279381" 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-26T00:08:38.280518" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.280598" elapsed="0.000018"/>
</return>
<msg time="2026-04-26T00:08:38.280811" 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-26T00:08:38.224074" elapsed="0.056784"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.282524" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.282233" elapsed="0.000365">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.282691" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.281823" elapsed="0.000893"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.283068" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.282788" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.283617" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.283325" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.283150" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.282768" elapsed="0.000933"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.286018" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.283847" elapsed="0.002199"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:38.286155" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:08:38.286339" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:38.281343" elapsed="0.005037"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.288178" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.287900" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.288645" 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-26T00:08:38.288405" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.289100" 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-26T00:08:38.288840" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.289531" 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-26T00:08:38.289292" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:38.290399" 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-26T00:08:38.290201" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:38.290746" 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-26T00:08:38.290573" elapsed="0.000198"/>
</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-26T00:08:38.290915" elapsed="0.000228"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.291542" 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-26T00:08:38.291295" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:38.291628" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.291785" 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-26T00:08:38.289771" elapsed="0.002039"/>
</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-26T00:08:38.303538" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-26T00:08:38.303805" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499544&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.303936" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:38.294129" elapsed="0.009858"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.291880" elapsed="0.012157"/>
</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-26T00:08:38.304231" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.304067" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.291862" elapsed="0.012458"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.311441" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499544&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.306089" elapsed="0.005464"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.305574" elapsed="0.006053"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.305533" elapsed="0.006149"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.314979" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.312325" elapsed="0.002703"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.311803" elapsed="0.003259"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.311767" elapsed="0.003320"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.315659" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.315265" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.316008" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.315757" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.316649" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.316325" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.316163" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.315739" elapsed="0.000995"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.317275" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.316889" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.317602" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.317372" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.318154" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.317838" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.317684" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.317354" elapsed="0.000884"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.318386" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:38.319205" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.318895" elapsed="0.000337"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.319382" elapsed="0.002319"/>
</kw>
<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="PASS" start="2026-04-26T00:08:38.304741" elapsed="0.017030"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:38.321980" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-26T00:08:38.321848" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.321829" elapsed="0.000246"/>
</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-26T00:08:38.322219" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.322288" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:38.324572" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499544&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.286821" elapsed="0.037796"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.324762" elapsed="0.000076"/>
</return>
<msg time="2026-04-26T00:08:38.325100" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499544&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.137428" elapsed="0.187757"/>
</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-26T00:08:38.325946" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.325379" elapsed="0.000688"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.325359" elapsed="0.000757"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.326167" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:38.326439" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499544&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:38.132041" elapsed="0.194427"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:38.327103" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b0f9620&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:38.326630" elapsed="0.000501"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.327742" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.327334" elapsed="0.000436"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.328351" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.327926" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.329123" elapsed="0.000614"/>
</kw>
<msg time="2026-04-26T00:08:38.329875" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:38.329922" level="INFO">${publish_count} = 1499544</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.328572" elapsed="0.001373"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.330344" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.330055" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.330035" elapsed="0.000487"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.331273" level="INFO">${publish_count} = 1499544</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.330670" elapsed="0.000630"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.332725" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.332055" elapsed="0.000867">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:38.333082" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:38.333126" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.331464" elapsed="0.001685"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.333505" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.333225" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.333206" elapsed="0.000473"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.339445" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.333823" elapsed="0.005649"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:38.339523" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:38.339756" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:38.339800" level="INFO">${publ_count} = 1499544</msg>
<msg time="2026-04-26T00:08:38.339841" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:38.128376" elapsed="0.211488"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.340042" elapsed="0.000235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:38.340433" elapsed="0.006070"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:08:38.127135" elapsed="0.219409"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.348790" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.348037" elapsed="0.000835"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:38.349019" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:38.349287" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:38.347562" elapsed="0.001751"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.350072" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-26T00:08:38.349473" elapsed="0.000628"/>
</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-26T00:08:38.386445" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.386072" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.387220" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.386971" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.387420" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.386630" elapsed="0.000815"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.388001" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.387602" elapsed="0.000427"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.388321" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.388476" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:38.388184" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.388924" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.388677" elapsed="0.000315"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.389920" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.389666" elapsed="0.000321"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.390401" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.390142" elapsed="0.000284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.391079" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:38.390768" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:38.391806" level="INFO">${encoded} = working-pair-2</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-26T00:08:38.391592" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:38.391881" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.392054" level="INFO">${encoded_value} = working-pair-2</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-26T00:08:38.391283" elapsed="0.000796"/>
</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-26T00:08:38.392225" elapsed="0.000225"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-26T00:08:38.390640" elapsed="0.001851"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.390475" elapsed="0.002050"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.392595" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.392754" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:38.389350" elapsed="0.003429"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.389061" elapsed="0.003750"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.392994" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.392835" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.389041" elapsed="0.004031"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.393646" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.393212" elapsed="0.000461"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.393721" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.385450" elapsed="0.008393"/>
</kw>
<msg time="2026-04-26T00:08:38.393896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.373139" elapsed="0.020809"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.405979" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.417924" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.429888" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.430092" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.430263" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.430617" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.430479" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.430464" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.430832" 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-26T00:08:38.431011" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.431174" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.430435" elapsed="0.000793"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.430336" elapsed="0.000917"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.431391" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.431467" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.431601" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:38.368838" elapsed="0.062803"/>
</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-26T00:08:38.455529" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.455160" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.456273" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.456057" elapsed="0.000279">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.456428" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.455711" elapsed="0.000741"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.457040" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:38.456609" elapsed="0.000490"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.457392" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.457513" 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-26T00:08:38.457257" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.457931" 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-26T00:08:38.457692" 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-26T00:08:38.458342" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.458060" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.458852" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-26T00:08:38.458565" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.458426" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.458041" elapsed="0.000893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.459618" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:38.459092" elapsed="0.000556"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.459697" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.454548" elapsed="0.005273"/>
</kw>
<msg time="2026-04-26T00:08:38.459874" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.442486" elapsed="0.017439"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.472041" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.484005" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.495792" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.495996" 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-26T00:08:38.496170" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.496522" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.496384" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.496370" elapsed="0.000298"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.496834" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.497019" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.497184" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.496342" elapsed="0.000895"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.496243" elapsed="0.001020"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.497403" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.497478" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.497620" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:38.441501" elapsed="0.056161"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.499180" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.498911" elapsed="0.000333">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.499335" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.498575" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.499668" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.499429" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.500222" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.499911" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.499748" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.499410" elapsed="0.000894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.502586" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.500451" elapsed="0.002161"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:38.502663" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.502839" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:38.498127" elapsed="0.004752"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.504644" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.504392" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.505125" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:38.504868" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.505554" 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-26T00:08:38.505317" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.505991" 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-26T00:08:38.505740" elapsed="0.000295"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:38.506814" 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-26T00:08:38.506623" elapsed="0.000217"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:38.507193" 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-26T00:08:38.507018" elapsed="0.000201"/>
</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-26T00:08:38.507402" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.508022" 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-26T00:08:38.507758" elapsed="0.000309"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:38.508110" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.508265" 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-26T00:08:38.506229" elapsed="0.002062"/>
</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-26T00:08:38.515669" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.515791" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.515887" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:38.510559" elapsed="0.005354"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.508361" elapsed="0.007622"/>
</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-26T00:08:38.516162" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.516012" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.508343" elapsed="0.007907"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.519552" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.517272" elapsed="0.002329"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.517055" elapsed="0.002580"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.517037" elapsed="0.002623"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.522601" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.519929" elapsed="0.002739"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.519715" elapsed="0.003003"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.519698" elapsed="0.003057"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.523553" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.523008" elapsed="0.000585"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.524050" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.523693" elapsed="0.000442"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.524834" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.524398" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.524171" elapsed="0.000773"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.523667" elapsed="0.001329"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.525747" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.525222" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.526322" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.525885" elapsed="0.000522"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.527118" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.526668" elapsed="0.000488"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.526442" elapsed="0.000765"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.525859" elapsed="0.001380"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.527451" elapsed="0.000506"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:38.528614" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.528213" elapsed="0.000440"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.528981" elapsed="0.002623"/>
</kw>
<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="PASS" start="2026-04-26T00:08:38.516590" elapsed="0.015078"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:38.531849" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:38.531742" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.531722" elapsed="0.000211"/>
</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-26T00:08:38.532094" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.532162" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:38.534402" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.503332" elapsed="0.031114"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.534586" elapsed="0.000073"/>
</return>
<msg time="2026-04-26T00:08:38.534880" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.355779" elapsed="0.179203"/>
</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-26T00:08:38.535712" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.535176" elapsed="0.000633"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.535156" elapsed="0.000701"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.535905" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:38.536188" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:38.350381" elapsed="0.185835"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:38.536801" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b96d9e0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:38.536374" elapsed="0.000454"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.537416" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.537018" elapsed="0.000424"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.538006" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.537594" elapsed="0.000439"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.538705" elapsed="0.000623"/>
</kw>
<msg time="2026-04-26T00:08:38.539462" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:38.539507" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.538190" elapsed="0.001339"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.539885" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.539604" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.539585" elapsed="0.000511"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.540806" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.540243" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.542231" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.541549" elapsed="0.000865">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:38.542556" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:38.542601" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.541032" elapsed="0.001592"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.542994" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.542699" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.542680" elapsed="0.000488"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.548829" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.543313" elapsed="0.005543"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:38.548907" elapsed="0.000051"/>
</return>
<msg time="2026-04-26T00:08:38.549179" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:38.549223" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-26T00:08:38.549263" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:38.347048" elapsed="0.202237"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.549442" elapsed="0.000228"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:38.549822" elapsed="0.005823"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:08:38.346655" elapsed="0.209031"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.558106" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.557355" elapsed="0.000832"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:38.558318" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:38.558583" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:38.556861" elapsed="0.001748"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.559273" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-26T00:08:38.558767" elapsed="0.000533"/>
</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-26T00:08:38.596605" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.596231" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.597379" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.597153" elapsed="0.000290">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.597536" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.596790" elapsed="0.000770"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.598116" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.597718" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.598435" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.598565" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:38.598301" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.599005" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.598744" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.600044" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.599765" elapsed="0.000326"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.600512" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.600246" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.601226" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:38.600882" elapsed="0.000370"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:38.601984" level="INFO">${encoded} = working-pair-3</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-26T00:08:38.601748" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:38.602066" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:38.602220" level="INFO">${encoded_value} = working-pair-3</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-26T00:08:38.601435" elapsed="0.000811"/>
</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-26T00:08:38.602396" elapsed="0.000225"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-26T00:08:38.600752" elapsed="0.001910"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.600587" elapsed="0.002111"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.602741" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:38.602897" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:38.599407" elapsed="0.003516"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.599120" elapsed="0.003835"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.603142" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.602997" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.599100" elapsed="0.004120"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.603789" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.603359" elapsed="0.000458"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.603865" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.595604" elapsed="0.008402"/>
</kw>
<msg time="2026-04-26T00:08:38.604060" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.582338" elapsed="0.021775"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.616234" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.628300" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.640145" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.640373" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.640549" 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-26T00:08:38.640913" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.640771" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.640755" elapsed="0.000257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.641178" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.641349" 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-26T00:08:38.641514" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.640726" elapsed="0.000843"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.640624" elapsed="0.000972"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.641739" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.641816" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:38.641954" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:38.578104" elapsed="0.063916"/>
</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-26T00:08:38.666016" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.665626" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.666741" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.666529" elapsed="0.000276">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.666896" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.666202" elapsed="0.000719"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.667476" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:38.667096" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.667788" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.667910" 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-26T00:08:38.667656" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.668353" 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-26T00:08:38.668111" elapsed="0.000288"/>
</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-26T00:08:38.668746" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.668464" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.669293" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-26T00:08:38.668985" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.668828" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.668445" elapsed="0.000930"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.670048" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:38.669516" elapsed="0.000594"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.670162" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.664989" elapsed="0.005299"/>
</kw>
<msg time="2026-04-26T00:08:38.670341" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.652850" elapsed="0.017541"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.682364" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.694196" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.705983" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.706173" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.706343" 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-26T00:08:38.706696" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.706557" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.706543" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.706908" 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-26T00:08:38.707087" 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-26T00:08:38.707247" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.706515" elapsed="0.000784"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.706417" elapsed="0.000908"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.707462" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.707536" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.707676" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:38.651853" elapsed="0.055866"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.709263" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.709026" elapsed="0.000313">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.709435" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.708665" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.709767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.709529" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.710313" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.710024" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.709847" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.709510" elapsed="0.000885"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.712643" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.710539" elapsed="0.002130"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:38.712720" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.712897" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:38.708216" elapsed="0.004721"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.714728" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.714476" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.715176" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:38.714923" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.715607" 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-26T00:08:38.715367" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.716046" 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-26T00:08:38.715792" elapsed="0.000297"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:38.716860" 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-26T00:08:38.716673" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:38.717242" 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-26T00:08:38.717070" elapsed="0.000197"/>
</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-26T00:08:38.717428" elapsed="0.000197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.718036" 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-26T00:08:38.717775" elapsed="0.000305"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:38.718123" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.718280" 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-26T00:08:38.716281" elapsed="0.002024"/>
</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-26T00:08:38.724808" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.725095" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495338&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.725210" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:38.720546" elapsed="0.004690"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.718376" elapsed="0.006908"/>
</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-26T00:08:38.725485" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.725311" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.718358" elapsed="0.007253"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.728909" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495338&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.726630" elapsed="0.002332"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.726414" elapsed="0.002597"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.726395" elapsed="0.002644"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.732295" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.729316" elapsed="0.003044"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.729097" elapsed="0.003313"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.729080" elapsed="0.003364"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.733258" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.732713" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.733738" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.733415" elapsed="0.000406"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.734526" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.734103" elapsed="0.000461"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.733855" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.733388" elapsed="0.001257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.735394" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.734861" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.735847" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.735530" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.736613" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.736201" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.735981" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.735504" elapsed="0.001225"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.736929" elapsed="0.000539"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:38.738070" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.737694" elapsed="0.000402"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.738245" elapsed="0.002269"/>
</kw>
<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="PASS" start="2026-04-26T00:08:38.725978" elapsed="0.014600"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:38.740758" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:38.740652" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.740633" elapsed="0.000209"/>
</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-26T00:08:38.741000" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.741069" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.743310" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495338&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.713415" elapsed="0.029939"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.743492" elapsed="0.000073"/>
</return>
<msg time="2026-04-26T00:08:38.743790" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495338&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.565092" elapsed="0.178812"/>
</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-26T00:08:38.744670" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.744128" elapsed="0.000640"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.744107" elapsed="0.000709"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.744866" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:38.745152" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495338&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:38.559574" elapsed="0.185607"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:38.745799" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b050a90&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:38.745339" elapsed="0.000488"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.746392" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.745994" elapsed="0.000424"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.746986" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.746571" elapsed="0.000445"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.747698" elapsed="0.000624"/>
</kw>
<msg time="2026-04-26T00:08:38.748459" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:38.748503" level="INFO">${publish_count} = 1495338</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.747176" elapsed="0.001349"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.748885" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.748603" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.748584" elapsed="0.000512"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.749825" level="INFO">${publish_count} = 1495338</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.749241" elapsed="0.000612"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.751190" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.750552" elapsed="0.000824">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:38.751520" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:38.751564" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.750033" elapsed="0.001553"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.751942" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.751662" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.751644" elapsed="0.000489"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.757815" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.752277" elapsed="0.005565"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:38.757894" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.758140" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:38.758186" level="INFO">${publ_count} = 1495338</msg>
<msg time="2026-04-26T00:08:38.758227" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:38.556360" elapsed="0.201890"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.758408" elapsed="0.000229"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:38.758791" elapsed="0.005845"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:08:38.555786" elapsed="0.208925"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.767135" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.766380" elapsed="0.000836"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:38.767349" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:38.767618" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:38.765907" elapsed="0.001738"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.768314" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-26T00:08:38.767805" elapsed="0.000537"/>
</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-26T00:08:38.804688" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.804312" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.805450" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.805225" elapsed="0.000289">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.805624" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.804876" elapsed="0.000776"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.806206" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.805810" elapsed="0.000423"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.806521" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.806649" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:38.806386" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.807086" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.806822" 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-26T00:08:38.808068" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.807796" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.808522" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.808263" elapsed="0.000285"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.809200" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:38.808888" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:38.809955" level="INFO">${encoded} = working-pair-4</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-26T00:08:38.809742" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:38.810049" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.810199" level="INFO">${encoded_value} = working-pair-4</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-26T00:08:38.809404" elapsed="0.000819"/>
</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-26T00:08:38.810367" elapsed="0.000224"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-26T00:08:38.808758" elapsed="0.001872"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.808596" elapsed="0.002070"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:38.810707" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:38.810859" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:38.807482" elapsed="0.003402"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.807197" elapsed="0.003718"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.811100" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.810940" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.807177" elapsed="0.004036"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.811781" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.811352" elapsed="0.000456"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.811856" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.803680" elapsed="0.008320"/>
</kw>
<msg time="2026-04-26T00:08:38.812053" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.791451" elapsed="0.020654"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.824079" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.836309" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.848250" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.848441" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.848610" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.848982" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.848824" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.848809" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.849197" 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-26T00:08:38.849358" 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-26T00:08:38.849515" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.848781" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.848682" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.849762" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.849838" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:38.849995" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:38.787212" elapsed="0.062827"/>
</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-26T00:08:38.874000" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.873582" elapsed="0.000449"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.874732" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:38.874515" elapsed="0.000280">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.874885" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.874191" elapsed="0.000719"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.875462" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:38.875084" elapsed="0.000405"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.875775" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:38.875898" 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-26T00:08:38.875642" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.876339" 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-26T00:08:38.876097" elapsed="0.000288"/>
</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-26T00:08:38.876729" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.876450" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.877258" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-26T00:08:38.876950" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.876813" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.876431" elapsed="0.000908"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.878041" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:38.877479" elapsed="0.000590"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.878117" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:38.872984" elapsed="0.005257"/>
</kw>
<msg time="2026-04-26T00:08:38.878293" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.860920" elapsed="0.017424"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.890375" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.902083" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.913859" 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-26T00:08:38.914069" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.914241" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.914589" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.914453" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:38.914438" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.914798" 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-26T00:08:38.914956" elapsed="0.000036"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.915132" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:38.914411" elapsed="0.000773"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.914313" elapsed="0.000895"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.915343" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.915416" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.915555" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:38.859931" elapsed="0.055666"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:38.917089" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.916833" elapsed="0.000319">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:38.917244" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:38.916500" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.917573" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.917336" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.918140" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.917825" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.917653" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.917317" elapsed="0.000905"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.920445" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.918365" elapsed="0.002106"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:38.920521" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.920697" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:38.916055" elapsed="0.004682"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.922521" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.922269" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.923013" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:38.922747" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.923443" 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-26T00:08:38.923204" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.923866" 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-26T00:08:38.923629" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:38.924710" 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-26T00:08:38.924526" elapsed="0.000210"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:38.925095" 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-26T00:08:38.924883" elapsed="0.000238"/>
</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-26T00:08:38.925265" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.925870" 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-26T00:08:38.925610" elapsed="0.000304"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:38.925956" elapsed="0.000046"/>
</return>
<msg time="2026-04-26T00:08:38.926130" 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-26T00:08:38.924132" elapsed="0.002023"/>
</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-26T00:08:38.932597" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.932811" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494321&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:38.932908" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:38.928377" elapsed="0.004556"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.926225" elapsed="0.006780"/>
</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-26T00:08:38.933181" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.933032" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.926207" elapsed="0.007060"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.936644" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494321&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.934370" elapsed="0.002323"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.934074" elapsed="0.002653"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.934055" elapsed="0.002696"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.939488" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:38.937039" elapsed="0.002514"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.936805" elapsed="0.002793"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.936789" elapsed="0.002843"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.940388" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.939846" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.940837" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.940522" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.941597" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.941186" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.940950" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.940496" elapsed="0.001216"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.942460" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.941942" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.943002" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.942654" elapsed="0.000431"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.943742" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.943334" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:38.943118" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.942627" elapsed="0.001230"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.944082" elapsed="0.000477"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:38.945181" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:38.944780" elapsed="0.000438"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.945426" elapsed="0.002873"/>
</kw>
<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="PASS" start="2026-04-26T00:08:38.933607" elapsed="0.014757"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:38.948544" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:38.948436" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.948417" elapsed="0.000210"/>
</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-26T00:08:38.948769" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:38.948836" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:38.951104" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494321&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.921184" elapsed="0.029965"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.951289" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:38.951589" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494321&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.774169" elapsed="0.177502"/>
</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-26T00:08:38.952439" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.951864" elapsed="0.000675"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.951845" elapsed="0.000743"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:38.952636" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:38.952904" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494321&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:38.768619" elapsed="0.184313"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:38.953537" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0cb97790&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:38.953110" elapsed="0.000454"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.954163" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.953714" elapsed="0.000476"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.954741" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.954341" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:38.955462" elapsed="0.000628"/>
</kw>
<msg time="2026-04-26T00:08:38.956265" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:38.956310" level="INFO">${publish_count} = 1494321</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.954921" elapsed="0.001412"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.956695" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.956410" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.956391" elapsed="0.000481"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.957642" level="INFO">${publish_count} = 1494321</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.957072" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:38.959042" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:38.958396" elapsed="0.000833">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:38.959371" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:38.959415" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.957831" elapsed="0.001607"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:38.959792" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:38.959512" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:38.959494" elapsed="0.000488"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.965698" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:38.960129" elapsed="0.005596"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:38.965776" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:38.966049" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:38.966093" level="INFO">${publ_count} = 1494321</msg>
<msg time="2026-04-26T00:08:38.966134" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:38.765387" elapsed="0.200769"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:38.966314" elapsed="0.000229"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:38.966695" elapsed="0.005932"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-26T00:08:38.764815" elapsed="0.207852"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.975066" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:38.974319" elapsed="0.000829"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:38.975276" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:08:38.975543" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:38.973826" elapsed="0.001743"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:38.976231" level="INFO">&amp;{mapping} = { ID=working-pair-5 }</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-26T00:08:38.975726" elapsed="0.000533"/>
</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-26T00:08:39.012338" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.011953" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.013072" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.012841" elapsed="0.000294">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.013226" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.012520" elapsed="0.000730"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.013829" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.013447" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.014191" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.014314" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:39.014028" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.014730" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.014489" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.015709" level="INFO">mapping: {'ID': 'working-pair-5'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.015458" elapsed="0.000295"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.016183" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.015903" elapsed="0.000306"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.016834" level="INFO">${value} = working-pair-5</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:39.016545" elapsed="0.000315"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:39.017573" level="INFO">${encoded} = working-pair-5</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-26T00:08:39.017364" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:39.017649" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.017799" level="INFO">${encoded_value} = working-pair-5</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-26T00:08:39.017054" elapsed="0.000770"/>
</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-26T00:08:39.017985" elapsed="0.000256"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-5</var>
<status status="PASS" start="2026-04-26T00:08:39.016417" elapsed="0.001864"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.016255" elapsed="0.002061"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.018358" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:39.018510" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:39.015144" elapsed="0.003391"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.014840" elapsed="0.003726"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.018732" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.018590" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.014821" elapsed="0.003986"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.019384" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.018942" elapsed="0.000468"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.019458" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.011351" elapsed="0.008228"/>
</kw>
<msg time="2026-04-26T00:08:39.019631" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:38.999219" elapsed="0.020463"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.031586" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.043340" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.055180" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.055369" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.055537" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.055888" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.055750" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.055735" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.056125" 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-26T00:08:39.056285" 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-26T00:08:39.056444" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.055707" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.055610" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.056658" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.056732" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.056866" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:38.995002" elapsed="0.061904"/>
</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-26T00:08:39.080821" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.080452" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.081582" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.081369" elapsed="0.000276">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.081735" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.081035" elapsed="0.000724"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.082333" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:39.081915" elapsed="0.000446"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.082645" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.082799" 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-26T00:08:39.082513" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.083236" 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-26T00:08:39.082992" elapsed="0.000290"/>
</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-26T00:08:39.083629" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.083348" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.084159" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</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-26T00:08:39.083850" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.083711" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.083329" elapsed="0.000912"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.084897" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:39.084379" elapsed="0.000546"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.084991" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.079836" elapsed="0.005282"/>
</kw>
<msg time="2026-04-26T00:08:39.085170" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.067760" elapsed="0.017460"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.098011" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.109846" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.121596" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.121783" 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-26T00:08:39.121949" elapsed="0.000035"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.122344" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.122181" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.122166" elapsed="0.000257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.122559" 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-26T00:08:39.122720" 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-26T00:08:39.122916" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.122138" elapsed="0.000849"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.122039" elapsed="0.000975"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.123155" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.123231" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.123371" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:39.066781" elapsed="0.056633"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.124890" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.124654" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.125065" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.124318" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.125400" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.125160" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.125925" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.125635" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.125480" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.125141" elapsed="0.000887"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.128301" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.126173" elapsed="0.002154"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:39.128379" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.128556" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:39.123844" elapsed="0.004751"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.130396" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.130115" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.130827" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:39.130589" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.131281" 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-26T00:08:39.131035" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.131707" 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-26T00:08:39.131470" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:39.132547" 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-26T00:08:39.132360" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:39.132889" 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-26T00:08:39.132720" elapsed="0.000194"/>
</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-26T00:08:39.133081" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.133670" 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-26T00:08:39.133425" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:39.133756" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.133910" 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-26T00:08:39.131943" elapsed="0.002042"/>
</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-26T00:08:39.140376" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.140583" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499843&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.140690" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:39.136253" elapsed="0.004463"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.134060" elapsed="0.006702"/>
</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-26T00:08:39.140935" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.140788" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.134042" elapsed="0.007006"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.144349" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499843&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.142059" elapsed="0.002340"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.141826" elapsed="0.002608"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.141809" elapsed="0.002650"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.147074" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.144729" elapsed="0.002410"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.144514" elapsed="0.002673"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.144497" elapsed="0.002725"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.147951" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.147440" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.148429" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.148110" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.149199" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.148759" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.148543" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.148083" elapsed="0.001234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.150061" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.149535" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.150533" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.150198" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.151294" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.150860" elapsed="0.000470"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.150647" elapsed="0.000732"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.150172" elapsed="0.001236"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.151607" elapsed="0.000492"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:39.152778" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.152405" elapsed="0.000409"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.153043" elapsed="0.002844"/>
</kw>
<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="PASS" start="2026-04-26T00:08:39.141394" elapsed="0.014557"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:39.156194" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:39.156085" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.156065" elapsed="0.000214"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.156421" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.156489" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.158756" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499843&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.129056" elapsed="0.029745"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.158942" elapsed="0.000097"/>
</return>
<msg time="2026-04-26T00:08:39.159266" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499843&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:38.982061" elapsed="0.177288"/>
</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-26T00:08:39.160108" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.159542" elapsed="0.000666"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.159522" elapsed="0.000736"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.160307" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:39.160576" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1499843&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:38.976534" elapsed="0.184070"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:39.161210" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b052f20&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:39.160762" elapsed="0.000632"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.161953" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.161552" elapsed="0.000445"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.162590" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.162151" elapsed="0.000465"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.163311" elapsed="0.000608"/>
</kw>
<msg time="2026-04-26T00:08:39.164089" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:39.164133" level="INFO">${publish_count} = 1499843</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.162773" elapsed="0.001382"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.164517" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.164234" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.164214" elapsed="0.000477"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.165425" level="INFO">${publish_count} = 1499843</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.164836" elapsed="0.000615"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.166793" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.166144" elapsed="0.000856">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:39.167144" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:39.167189" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.165612" elapsed="0.001600"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.167606" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.167289" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.167270" elapsed="0.000515"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.173576" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.167931" elapsed="0.005672"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:39.173656" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.173887" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:39.173932" level="INFO">${publ_count} = 1499843</msg>
<msg time="2026-04-26T00:08:39.173990" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:38.973328" elapsed="0.200687"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.174174" elapsed="0.000227"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:39.174576" elapsed="0.006154"/>
</kw>
<var name="${index}">5</var>
<status status="PASS" start="2026-04-26T00:08:38.972766" elapsed="0.208005"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.182976" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.182213" elapsed="0.000847"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:39.183192" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:08:39.183458" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:39.181744" elapsed="0.001740"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.184233" level="INFO">&amp;{mapping} = { ID=working-pair-6 }</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-26T00:08:39.183641" elapsed="0.000620"/>
</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-26T00:08:39.220432" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.220061" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.221178" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.220940" elapsed="0.000301">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.221332" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.220617" elapsed="0.000740"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.221891" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.221514" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.222229" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.222355" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:39.222086" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.222804" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.222549" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.223793" level="INFO">mapping: {'ID': 'working-pair-6'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.223540" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.224268" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.224009" elapsed="0.000285"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.224923" level="INFO">${value} = working-pair-6</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:39.224632" elapsed="0.000318"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:39.225667" level="INFO">${encoded} = working-pair-6</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-26T00:08:39.225458" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:39.225783" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:39.225935" level="INFO">${encoded_value} = working-pair-6</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-26T00:08:39.225150" elapsed="0.000827"/>
</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-26T00:08:39.226126" elapsed="0.000226"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-6</var>
<status status="PASS" start="2026-04-26T00:08:39.224505" elapsed="0.001888"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.224342" elapsed="0.002085"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.226469" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:39.226653" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:39.223215" elapsed="0.003463"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.222914" elapsed="0.003796"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.226877" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.226733" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.222895" elapsed="0.004057"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.227539" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.227108" elapsed="0.000458"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.227613" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.219438" elapsed="0.008296"/>
</kw>
<msg time="2026-04-26T00:08:39.227784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.207175" elapsed="0.020659"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.239997" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.251875" elapsed="0.000036"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.266507" elapsed="0.000039"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.266834" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.267040" 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-26T00:08:39.267441" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.267295" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.267279" elapsed="0.000244"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.267660" 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-26T00:08:39.267892" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.268074" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.267242" elapsed="0.000887"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.267123" elapsed="0.001034"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.268300" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.268377" elapsed="0.000018"/>
</return>
<msg time="2026-04-26T00:08:39.268553" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:39.202928" elapsed="0.065668"/>
</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-26T00:08:39.292664" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.292281" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.293453" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.293202" elapsed="0.000325">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.293620" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.292850" elapsed="0.000794"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.294197" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:39.293801" elapsed="0.000423"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.294516" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.294661" 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-26T00:08:39.294378" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.295110" 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-26T00:08:39.294848" elapsed="0.000309"/>
</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-26T00:08:39.295507" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.295223" elapsed="0.000342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.296039" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</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-26T00:08:39.295727" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.295589" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.295204" elapsed="0.000917"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.296793" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:39.296261" elapsed="0.000561"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.296870" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.291662" elapsed="0.005351"/>
</kw>
<msg time="2026-04-26T00:08:39.297103" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.279512" elapsed="0.017645"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.309298" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.321064" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.332857" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.333071" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.333242" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.333602" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.333465" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.333449" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.333812" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.333989" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.334151" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.333421" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.333315" elapsed="0.000914"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.334367" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.334440" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.334587" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:39.278477" elapsed="0.056152"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.336162" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.335892" elapsed="0.000334">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.336318" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.335559" elapsed="0.000783"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.336688" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.336448" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.337254" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.336940" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.336770" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.336428" elapsed="0.000908"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.339612" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.337482" elapsed="0.002156"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:39.339688" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.339865" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:39.335111" elapsed="0.004794"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.341664" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.341414" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.342110" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:39.341856" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.342535" 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-26T00:08:39.342298" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.342982" 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-26T00:08:39.342720" elapsed="0.000307"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:39.343808" 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-26T00:08:39.343615" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:39.344181" 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-26T00:08:39.344009" elapsed="0.000198"/>
</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-26T00:08:39.344349" elapsed="0.000207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.344945" 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-26T00:08:39.344703" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:39.345054" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.345208" 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-26T00:08:39.343222" elapsed="0.002011"/>
</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-26T00:08:39.352377" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.352505" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.352601" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:39.347521" elapsed="0.005106"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.345302" elapsed="0.007371"/>
</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-26T00:08:39.352848" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.352699" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.345284" elapsed="0.007652"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.356408" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.353952" elapsed="0.002505"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.353737" elapsed="0.002790"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.353719" elapsed="0.002835"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.359148" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.356828" elapsed="0.002367"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.356611" elapsed="0.002619"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.356593" elapsed="0.002663"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.359788" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.359417" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.360137" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.359886" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.360673" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.360376" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.360221" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.359867" elapsed="0.000890"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.361287" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.360911" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.361610" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.361384" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.362156" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.361845" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.361691" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.361365" elapsed="0.000874"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.362383" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:39.363215" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.362918" elapsed="0.000323"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.363391" elapsed="0.002267"/>
</kw>
<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="PASS" start="2026-04-26T00:08:39.353309" elapsed="0.012413"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:39.365902" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:39.365795" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.365775" elapsed="0.000229"/>
</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-26T00:08:39.366146" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.366213" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.368462" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.340356" elapsed="0.028152"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.368650" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:39.368952" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.190034" elapsed="0.179026"/>
</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-26T00:08:39.369814" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.369255" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.369235" elapsed="0.000810"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.370097" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.370375" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:39.184537" elapsed="0.185867"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:39.371064" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b9b77e0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:39.370567" elapsed="0.000526"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.371653" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.371247" elapsed="0.000433"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.372277" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.371833" elapsed="0.000471"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.373013" elapsed="0.000621"/>
</kw>
<msg time="2026-04-26T00:08:39.373772" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:39.373818" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.372462" elapsed="0.001379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.374224" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.373919" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.373899" elapsed="0.000505"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.375261" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.374550" elapsed="0.000739"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.376693" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.376057" elapsed="0.000826">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:39.377042" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:39.377087" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.375454" elapsed="0.001656"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.377469" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.377187" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.377168" elapsed="0.000476"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.383346" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.377789" elapsed="0.005585"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:39.383426" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.383659" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:39.383703" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-26T00:08:39.383745" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:39.181250" elapsed="0.202517"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.383926" elapsed="0.000311"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:39.384392" elapsed="0.006105"/>
</kw>
<var name="${index}">6</var>
<status status="PASS" start="2026-04-26T00:08:39.180870" elapsed="0.209668"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.392750" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.392015" elapsed="0.000816"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:39.393201" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:08:39.393473" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:39.391544" elapsed="0.001990"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.394214" level="INFO">&amp;{mapping} = { ID=working-pair-7 }</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-26T00:08:39.393698" elapsed="0.000544"/>
</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-26T00:08:39.430303" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.429914" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.431059" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.430811" elapsed="0.000316">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.431221" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.430488" elapsed="0.000757"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.431782" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.431403" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.432114" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.432244" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:39.431977" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.432661" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.432421" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.433634" level="INFO">mapping: {'ID': 'working-pair-7'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.433385" elapsed="0.000293"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.434104" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.433829" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.434762" level="INFO">${value} = working-pair-7</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:39.434469" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:39.435534" level="INFO">${encoded} = working-pair-7</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-26T00:08:39.435320" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:39.435610" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.435760" level="INFO">${encoded_value} = working-pair-7</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-26T00:08:39.434982" elapsed="0.000802"/>
</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-26T00:08:39.435928" elapsed="0.000241"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-7</var>
<status status="PASS" start="2026-04-26T00:08:39.434342" elapsed="0.001868"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.434178" elapsed="0.002066"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.436286" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:39.436438" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:39.433072" elapsed="0.003391"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.432772" elapsed="0.003722"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.436660" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.436519" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.432753" elapsed="0.003983"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.437322" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.436872" elapsed="0.000477"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.437397" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.429315" elapsed="0.008240"/>
</kw>
<msg time="2026-04-26T00:08:39.437608" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.416980" elapsed="0.020680"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.449579" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.461431" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.473190" 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-26T00:08:39.473377" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.473546" 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-26T00:08:39.473906" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.473769" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.473750" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.474147" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.474334" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.474495" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.473722" elapsed="0.000830"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.473618" elapsed="0.000968"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.474743" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.474820" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.474955" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:39.412753" elapsed="0.062269"/>
</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-26T00:08:39.498926" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.498559" elapsed="0.000440"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.499726" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.499512" elapsed="0.000277">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.499881" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.499185" elapsed="0.000720"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.500459" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:39.500079" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.500771" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.500892" 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-26T00:08:39.500640" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.501324" 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-26T00:08:39.501085" elapsed="0.000284"/>
</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-26T00:08:39.501718" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.501435" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.502248" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</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-26T00:08:39.501938" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.501800" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.501416" elapsed="0.000915"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.503009" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:39.502469" elapsed="0.000570"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.503088" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.497945" elapsed="0.005281"/>
</kw>
<msg time="2026-04-26T00:08:39.503278" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.485888" elapsed="0.017441"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.515162" elapsed="0.000055"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.526893" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.538863" elapsed="0.000058"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.539099" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.539300" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.539651" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.539514" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.539500" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.539862" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.540041" 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-26T00:08:39.540202" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.539472" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.539375" elapsed="0.000905"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.540416" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.540490" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.540629" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:39.484909" elapsed="0.055763"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.542155" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.541899" elapsed="0.000318">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.542308" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.541569" elapsed="0.000763"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.542636" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.542401" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.543185" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.542872" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.542716" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.542382" elapsed="0.000907"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.545541" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.543436" elapsed="0.002131"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:39.545617" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.545791" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:39.541124" elapsed="0.004707"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.547600" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.547349" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.548062" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:39.547792" elapsed="0.000352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.548533" 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-26T00:08:39.548292" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.548953" 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-26T00:08:39.548718" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:39.549788" 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-26T00:08:39.549601" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:39.550166" 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-26T00:08:39.549990" elapsed="0.000201"/>
</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-26T00:08:39.550334" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.550920" 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-26T00:08:39.550677" elapsed="0.000302"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:39.551024" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.551180" 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-26T00:08:39.549208" elapsed="0.001997"/>
</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-26T00:08:39.558021" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.558131" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.558225" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:39.553446" elapsed="0.004804"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.551287" elapsed="0.007008"/>
</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-26T00:08:39.558467" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.558321" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.551269" elapsed="0.007284"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.561848" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.559575" elapsed="0.002322"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.559359" elapsed="0.002572"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.559341" elapsed="0.002615"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.564724" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.562239" elapsed="0.002547"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.562027" elapsed="0.002807"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.562010" elapsed="0.002858"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.565613" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.565104" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.566083" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.565747" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.566823" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.566410" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.566197" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.565721" elapsed="0.001217"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.567685" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.567168" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.568199" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.567818" elapsed="0.000464"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.568939" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.568529" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.568316" elapsed="0.000731"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.567792" elapsed="0.001284"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.569276" elapsed="0.000474"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:39.570367" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.569990" elapsed="0.000413"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.570608" elapsed="0.002745"/>
</kw>
<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="PASS" start="2026-04-26T00:08:39.558889" elapsed="0.014527"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:39.573595" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:39.573489" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.573470" elapsed="0.000208"/>
</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-26T00:08:39.573820" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.573888" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.576162" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.546272" elapsed="0.029935"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.576345" elapsed="0.000072"/>
</return>
<msg time="2026-04-26T00:08:39.576639" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.399933" elapsed="0.176786"/>
</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-26T00:08:39.577468" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.576909" elapsed="0.000658"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.576890" elapsed="0.000726"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.577664" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:39.577928" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:39.394524" elapsed="0.183448"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:39.578552" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0af55260&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:39.578133" elapsed="0.000446"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.579136" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.578729" elapsed="0.000434"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.579742" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.579314" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.580450" elapsed="0.000638"/>
</kw>
<msg time="2026-04-26T00:08:39.581223" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:39.581313" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.579922" elapsed="0.001417"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.581701" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.581416" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.581397" elapsed="0.000480"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.582646" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.582076" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.584038" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.583396" elapsed="0.000829">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:39.584367" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:39.584411" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.582834" elapsed="0.001600"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.584786" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.584509" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.584491" elapsed="0.000486"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.591657" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.585123" elapsed="0.006561"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:39.591738" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.591980" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:39.592026" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-26T00:08:39.592068" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:39.391046" elapsed="0.201044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.592247" elapsed="0.000231"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:39.592630" elapsed="0.006037"/>
</kw>
<var name="${index}">7</var>
<status status="PASS" start="2026-04-26T00:08:39.390641" elapsed="0.208066"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.600917" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.600181" elapsed="0.000859"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:39.601171" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:08:39.601438" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:39.599710" elapsed="0.001755"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.602132" level="INFO">&amp;{mapping} = { ID=working-pair-8 }</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-26T00:08:39.601623" elapsed="0.000537"/>
</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-26T00:08:39.638435" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.638060" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.639180" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.638942" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.639338" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.638618" elapsed="0.000744"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.639927" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.639536" elapsed="0.000469"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.640301" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.640427" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:39.640165" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.640849" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.640604" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.642016" level="INFO">mapping: {'ID': 'working-pair-8'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.641740" elapsed="0.000323"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.642483" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.642218" elapsed="0.000291"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.643167" level="INFO">${value} = working-pair-8</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:39.642852" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:39.643931" level="INFO">${encoded} = working-pair-8</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-26T00:08:39.643719" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:39.644024" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.644177" level="INFO">${encoded_value} = working-pair-8</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-26T00:08:39.643374" elapsed="0.000828"/>
</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-26T00:08:39.644349" elapsed="0.000225"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-8</var>
<status status="PASS" start="2026-04-26T00:08:39.642722" elapsed="0.001892"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.642558" elapsed="0.002090"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.644691" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:39.644845" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:39.641263" elapsed="0.003608"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.640976" elapsed="0.003927"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.645093" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.644928" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.640942" elapsed="0.004228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.645737" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.645309" elapsed="0.000456"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.645814" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.637441" elapsed="0.008496"/>
</kw>
<msg time="2026-04-26T00:08:39.646006" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.625309" elapsed="0.020749"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.657886" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.669735" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.681633" 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-26T00:08:39.681824" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.682016" 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-26T00:08:39.682376" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.682236" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.682220" 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-26T00:08:39.682593" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.682758" 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-26T00:08:39.682920" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.682192" elapsed="0.000798"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.682092" elapsed="0.000925"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.683159" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.683235" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.683370" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:39.620946" elapsed="0.062466"/>
</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-26T00:08:39.707794" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.707392" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.708541" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.708325" elapsed="0.000278">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.708696" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.707995" elapsed="0.000725"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.709282" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:39.708881" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.709597" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.709720" 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-26T00:08:39.709464" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.710162" 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-26T00:08:39.709897" elapsed="0.000311"/>
</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-26T00:08:39.710591" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.710310" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.711129" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</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-26T00:08:39.710816" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.710675" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.710289" elapsed="0.000925"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.711893" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:39.711355" elapsed="0.000567"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.711987" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.706764" elapsed="0.005352"/>
</kw>
<msg time="2026-04-26T00:08:39.712169" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.694430" elapsed="0.017791"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.724401" elapsed="0.000034"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.736228" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.748014" 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-26T00:08:39.748202" 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-26T00:08:39.748370" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.748721" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.748584" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.748569" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.748934" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.749113" 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-26T00:08:39.749273" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.748542" elapsed="0.000784"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.748444" elapsed="0.000909"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.749542" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.749669" elapsed="0.000018"/>
</return>
<msg time="2026-04-26T00:08:39.749813" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:39.693444" elapsed="0.056413"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.751373" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.751130" elapsed="0.000308">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.751530" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.750773" elapsed="0.000781"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.751899" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.751625" elapsed="0.000331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.752449" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.752158" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.751997" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.751606" elapsed="0.000925"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.754982" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.752674" elapsed="0.002337"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:39.755063" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.755242" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:39.750324" elapsed="0.004958"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.757053" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.756779" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.757484" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:39.757248" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.757919" 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-26T00:08:39.757676" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.758364" 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-26T00:08:39.758125" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:39.759206" 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-26T00:08:39.759018" elapsed="0.000214"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:39.759548" 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-26T00:08:39.759379" elapsed="0.000194"/>
</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-26T00:08:39.759744" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.760356" 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-26T00:08:39.760112" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:39.760442" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:39.760594" 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-26T00:08:39.758598" elapsed="0.002021"/>
</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-26T00:08:39.766853" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.767132" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495357&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.767241" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:39.762699" elapsed="0.004568"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.760688" elapsed="0.006626"/>
</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-26T00:08:39.767489" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.767340" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.760671" elapsed="0.006908"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.772121" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495357&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.768877" elapsed="0.003316"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.768573" elapsed="0.003670"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.768547" elapsed="0.003731"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.776065" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.772656" elapsed="0.003457"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.772356" elapsed="0.003793"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.772332" elapsed="0.003842"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.776703" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.776330" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.777044" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.776800" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.777584" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.777285" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.777127" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.776781" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.778202" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.777823" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.778524" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.778299" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.779079" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.778757" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.778605" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.778281" elapsed="0.000881"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.779305" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:39.780115" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.779823" elapsed="0.000319"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.780291" elapsed="0.002280"/>
</kw>
<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="PASS" start="2026-04-26T00:08:39.767973" elapsed="0.014662"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:39.782815" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:39.782709" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.782689" elapsed="0.000212"/>
</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-26T00:08:39.783064" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.783133" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.785396" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495357&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.755725" elapsed="0.029716"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.785620" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:39.785921" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495357&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.607916" elapsed="0.178111"/>
</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-26T00:08:39.786763" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.786221" elapsed="0.000641"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.786202" elapsed="0.000709"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.786976" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.787248" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1495357&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:39.602437" elapsed="0.184840"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:39.787887" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ab79f30&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:39.787437" elapsed="0.000478"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.788485" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.788085" elapsed="0.000427"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.789109" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.788664" elapsed="0.000471"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.789820" elapsed="0.000626"/>
</kw>
<msg time="2026-04-26T00:08:39.790582" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:39.790628" level="INFO">${publish_count} = 1495357</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.789295" elapsed="0.001356"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.791027" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.790728" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.790709" elapsed="0.000497"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.791973" level="INFO">${publish_count} = 1495357</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.791352" elapsed="0.000650"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.793396" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.792695" elapsed="0.000890">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:39.793727" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:39.793772" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.792166" elapsed="0.001629"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.794169" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.793872" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.793853" elapsed="0.000494"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.799955" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.794494" elapsed="0.005501"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:39.800047" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.800321" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:39.800367" level="INFO">${publ_count} = 1495357</msg>
<msg time="2026-04-26T00:08:39.800409" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:39.599193" elapsed="0.201238"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.800589" elapsed="0.000231"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:39.801054" elapsed="0.006069"/>
</kw>
<var name="${index}">8</var>
<status status="PASS" start="2026-04-26T00:08:39.598806" elapsed="0.208359"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.809542" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.808683" elapsed="0.000939"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:39.809752" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:08:39.810033" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:39.808181" elapsed="0.001883"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.810760" level="INFO">&amp;{mapping} = { ID=working-pair-9 }</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-26T00:08:39.810224" elapsed="0.000565"/>
</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-26T00:08:39.846983" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.846600" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.847716" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.847493" elapsed="0.000286">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.847871" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.847169" elapsed="0.000753"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.848484" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.848103" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.848799" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.848928" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:39.848665" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.849366" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.849125" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.850489" level="INFO">mapping: {'ID': 'working-pair-9'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.850091" elapsed="0.000443"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.850950" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.850689" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.851625" level="INFO">${value} = working-pair-9</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:39.851333" elapsed="0.000318"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:39.852388" level="INFO">${encoded} = working-pair-9</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-26T00:08:39.852176" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:39.852463" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.852613" level="INFO">${encoded_value} = working-pair-9</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-26T00:08:39.851831" elapsed="0.000806"/>
</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-26T00:08:39.852782" elapsed="0.000238"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-9</var>
<status status="PASS" start="2026-04-26T00:08:39.851205" elapsed="0.001892"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.851040" elapsed="0.002093"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:39.853176" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:39.853332" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:39.849761" elapsed="0.003596"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.849477" elapsed="0.003911"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.853556" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.853412" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.849458" elapsed="0.004175"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.854217" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.853772" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.854292" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.845994" elapsed="0.008421"/>
</kw>
<msg time="2026-04-26T00:08:39.854467" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.833869" elapsed="0.020649"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.866366" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.878139" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.889855" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.890056" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.890227" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.890580" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.890442" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.890428" elapsed="0.000229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.890790" 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-26T00:08:39.890949" elapsed="0.000038"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.891127" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.890400" elapsed="0.000781"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.890300" elapsed="0.000906"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.891384" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.891461" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:39.891596" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:39.829599" elapsed="0.062038"/>
</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-26T00:08:39.915878" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.915506" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.916642" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:39.916429" elapsed="0.000275">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.916796" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.916103" elapsed="0.000718"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.917375" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:39.916992" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.917687" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:39.917809" 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-26T00:08:39.917554" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.918250" 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-26T00:08:39.918003" elapsed="0.000293"/>
</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-26T00:08:39.918646" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.918363" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.919177" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</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-26T00:08:39.918866" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.918728" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.918343" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.919914" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:39.919398" elapsed="0.000545"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.920008" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:39.914883" elapsed="0.005278"/>
</kw>
<msg time="2026-04-26T00:08:39.920214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.902589" elapsed="0.017677"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.932034" elapsed="0.000076"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.943818" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.955643" 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-26T00:08:39.955833" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.956025" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.956396" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.956257" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:39.956242" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.956610" 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-26T00:08:39.956771" 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-26T00:08:39.956931" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:39.956213" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.956100" elapsed="0.000928"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.957167" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.957242" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.957383" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:39.901476" elapsed="0.055950"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:39.958909" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:39.958673" elapsed="0.000320">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:39.959090" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:39.958337" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.959424" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.959185" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.960010" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.959703" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.959537" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.959166" elapsed="0.000929"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.962558" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.960277" elapsed="0.002308"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:39.962635" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.962813" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:39.957864" elapsed="0.004990"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.964641" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.964388" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.965090" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:39.964835" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.965522" 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-26T00:08:39.965282" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.965951" 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-26T00:08:39.965711" elapsed="0.000300"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:39.966792" 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-26T00:08:39.966606" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:39.967160" 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-26T00:08:39.966986" elapsed="0.000199"/>
</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-26T00:08:39.967328" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.967915" 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-26T00:08:39.967672" elapsed="0.000302"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:39.968018" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:39.968201" 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-26T00:08:39.966211" elapsed="0.002016"/>
</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-26T00:08:39.975243" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.975453" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1489250&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:39.975548" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:39.970309" elapsed="0.005265"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.968298" elapsed="0.007321"/>
</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-26T00:08:39.975792" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.975645" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.968280" elapsed="0.007600"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.980335" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1489250&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.976937" elapsed="0.003467"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.976721" elapsed="0.003732"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.976703" elapsed="0.003786"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.984087" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:39.980868" elapsed="0.003284"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.980566" elapsed="0.003740"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.980543" elapsed="0.003806"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.985085" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.984572" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.985413" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.985183" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.985946" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.985648" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.985495" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.985164" elapsed="0.000883"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.986560" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.986200" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.986880" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.986656" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.987425" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:39.987133" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:39.986976" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.986637" elapsed="0.000870"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:39.987650" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:39.988452" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:39.988169" elapsed="0.000309"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.988626" elapsed="0.002283"/>
</kw>
<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="PASS" start="2026-04-26T00:08:39.976292" elapsed="0.014699"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:39.991178" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:39.991069" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.991050" elapsed="0.000213"/>
</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-26T00:08:39.991404" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:39.991472" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:39.993727" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1489250&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.963308" elapsed="0.030464"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.993913" elapsed="0.000102"/>
</return>
<msg time="2026-04-26T00:08:39.994244" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1489250&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:39.816530" elapsed="0.177796"/>
</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-26T00:08:39.995080" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.994517" elapsed="0.000663"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.994497" elapsed="0.000732"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:39.995279" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:39.995585" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1489250&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:39.811081" elapsed="0.184533"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:39.996237" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b9904a0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:39.995774" elapsed="0.000492"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:39.996818" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.996420" elapsed="0.000425"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:39.997419" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:39.997015" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:39.998148" elapsed="0.000608"/>
</kw>
<msg time="2026-04-26T00:08:39.998893" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:39.998938" level="INFO">${publish_count} = 1489250</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:39.997604" elapsed="0.001382"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:39.999352" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:39.999066" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:39.999047" elapsed="0.000481"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.000288" level="INFO">${publish_count} = 1489250</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:39.999674" elapsed="0.000641"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.001654" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.001028" elapsed="0.000810">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:40.001997" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:40.002044" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.000479" elapsed="0.001588"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.002426" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.002146" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.002127" elapsed="0.000474"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.008294" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.002743" elapsed="0.005579"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:40.008376" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.008604" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:40.008649" level="INFO">${publ_count} = 1489250</msg>
<msg time="2026-04-26T00:08:40.008690" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:39.807635" elapsed="0.201078"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.008869" elapsed="0.000252"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.009275" elapsed="0.006265"/>
</kw>
<var name="${index}">9</var>
<status status="PASS" start="2026-04-26T00:08:39.807266" elapsed="0.208315"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.017816" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.017073" elapsed="0.000825"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:40.018049" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:40.018320" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:40.016597" elapsed="0.001749"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.019108" level="INFO">&amp;{mapping} = { ID=working-pair-10 }</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-26T00:08:40.018503" elapsed="0.000634"/>
</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-26T00:08:40.055533" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.055157" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.056284" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.056061" elapsed="0.000316">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.056476" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.055719" elapsed="0.000782"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.057057" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.056659" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.057375" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.057503" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:40.057240" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.057918" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.057679" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.059060" level="INFO">mapping: {'ID': 'working-pair-10'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.058785" elapsed="0.000321"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.059522" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.059262" elapsed="0.000286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.060204" level="INFO">${value} = working-pair-10</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:40.059891" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:40.060950" level="INFO">${encoded} = working-pair-10</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-26T00:08:40.060740" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:40.061040" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.061190" level="INFO">${encoded_value} = working-pair-10</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-26T00:08:40.060430" elapsed="0.000785"/>
</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-26T00:08:40.061360" elapsed="0.000223"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-10</var>
<status status="PASS" start="2026-04-26T00:08:40.059760" elapsed="0.001862"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.059595" elapsed="0.002062"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.061699" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:40.061853" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:40.058329" elapsed="0.003549"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.058046" elapsed="0.003863"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.062095" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.061933" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.058026" elapsed="0.004145"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.062731" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.062308" elapsed="0.000450"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.062806" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.054538" elapsed="0.008390"/>
</kw>
<msg time="2026-04-26T00:08:40.063030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.042400" elapsed="0.020683"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.074969" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.086711" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.098459" 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-26T00:08:40.098651" elapsed="0.000029"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.098862" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.099241" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.099101" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.099086" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.099454" 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-26T00:08:40.099615" 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-26T00:08:40.099773" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.099057" elapsed="0.000768"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.098939" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.100004" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.100081" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:40.100216" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:40.038030" elapsed="0.062227"/>
</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-26T00:08:40.125413" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.125041" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.126159" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.125924" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.126355" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.125598" elapsed="0.000782"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.126919" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:40.126539" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.127258" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.127380" 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-26T00:08:40.127123" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.127799" 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-26T00:08:40.127556" elapsed="0.000290"/>
</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-26T00:08:40.128212" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.127913" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.128932" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</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-26T00:08:40.128434" elapsed="0.000543"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.128295" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.127894" elapsed="0.001144"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.129725" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:40.129191" elapsed="0.000563"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.129802" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.124405" elapsed="0.005529"/>
</kw>
<msg time="2026-04-26T00:08:40.130012" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.111201" elapsed="0.018872"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.141831" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.153638" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.165481" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.165701" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.165870" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.166241" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.166102" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.166087" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.166454" 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-26T00:08:40.166615" 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-26T00:08:40.166773" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.166059" elapsed="0.000767"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.165943" elapsed="0.000908"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.167005" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.167081" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.167222" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:40.110175" elapsed="0.057089"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.168778" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.168506" elapsed="0.000336">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.168933" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.168171" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.169290" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.169049" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.169817" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.169529" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.169370" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.169027" elapsed="0.000870"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.172329" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.170060" elapsed="0.002295"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:40.172405" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.172584" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:40.167698" elapsed="0.004954"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.174447" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.174184" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.174880" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:40.174642" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.175334" 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-26T00:08:40.175089" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.175760" 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-26T00:08:40.175523" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:40.176665" 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-26T00:08:40.176452" elapsed="0.000240"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:40.177032" 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-26T00:08:40.176841" elapsed="0.000217"/>
</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-26T00:08:40.177202" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.177791" 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-26T00:08:40.177548" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:40.177879" elapsed="0.000038"/>
</return>
<msg time="2026-04-26T00:08:40.178090" 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-26T00:08:40.176052" elapsed="0.002067"/>
</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-26T00:08:40.185181" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.185486" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1480447&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.185634" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:40.180191" elapsed="0.005479"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.178193" elapsed="0.007541"/>
</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-26T00:08:40.186003" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.185771" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.178174" elapsed="0.007956"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.190769" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1480447&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.187543" elapsed="0.003298"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.187241" elapsed="0.003649"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.187215" elapsed="0.003711"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.194258" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.191331" elapsed="0.002975"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.191026" elapsed="0.003315"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.191001" elapsed="0.003365"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.194899" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.194526" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.195246" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.195014" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.195786" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.195486" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.195330" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.194994" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.196412" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.196044" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.196752" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.196509" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.197304" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.197007" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.196834" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.196490" elapsed="0.000932"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.197570" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:40.198371" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.198096" elapsed="0.000301"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.198546" elapsed="0.002327"/>
</kw>
<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="PASS" start="2026-04-26T00:08:40.186611" elapsed="0.014326"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:40.201134" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.201027" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.201007" elapsed="0.000213"/>
</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-26T00:08:40.201363" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.201432" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.203673" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1480447&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.173117" elapsed="0.030602"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.203859" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:40.204182" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1480447&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.024850" elapsed="0.179414"/>
</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-26T00:08:40.205039" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.204456" elapsed="0.000687"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.204436" elapsed="0.000756"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.205240" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.205509" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1480447&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:40.019416" elapsed="0.186122"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:40.206144" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aabff10&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:40.205697" elapsed="0.000475"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.206722" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.206325" elapsed="0.000424"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.207317" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.206900" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.208038" elapsed="0.000608"/>
</kw>
<msg time="2026-04-26T00:08:40.208851" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.208897" level="INFO">${publish_count} = 1480447</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.207498" elapsed="0.001423"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.209312" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.209026" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.209006" elapsed="0.000520"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.210264" level="INFO">${publish_count} = 1480447</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.209674" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.211624" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.210996" elapsed="0.000814">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:40.211953" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:40.212014" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.210456" elapsed="0.001583"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.212399" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.212116" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.212098" elapsed="0.000475"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.218221" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.212733" elapsed="0.005515"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:40.218300" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:40.218531" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:40.218575" level="INFO">${publ_count} = 1480447</msg>
<msg time="2026-04-26T00:08:40.218615" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:40.016064" elapsed="0.202573"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.218795" elapsed="0.000315"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.219269" elapsed="0.006311"/>
</kw>
<var name="${index}">10</var>
<status status="PASS" start="2026-04-26T00:08:40.015682" elapsed="0.209939"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.227818" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.227087" elapsed="0.000812"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:40.228087" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:08:40.228354" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:40.226612" elapsed="0.001768"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.229062" level="INFO">&amp;{mapping} = { ID=working-pair-11 }</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-26T00:08:40.228537" elapsed="0.000552"/>
</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-26T00:08:40.265378" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.265004" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.266121" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.265885" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.266275" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.265561" elapsed="0.000739"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.266834" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.266457" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.267162" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.267290" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:40.267029" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.267748" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.267506" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.268898" level="INFO">mapping: {'ID': 'working-pair-11'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.268478" elapsed="0.000466"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.269382" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.269121" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.270061" level="INFO">${value} = working-pair-11</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:40.269749" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:40.270789" level="INFO">${encoded} = working-pair-11</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-26T00:08:40.270577" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:40.270863" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.271034" level="INFO">${encoded_value} = working-pair-11</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-26T00:08:40.270268" elapsed="0.000791"/>
</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-26T00:08:40.271205" elapsed="0.000222"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-11</var>
<status status="PASS" start="2026-04-26T00:08:40.269620" elapsed="0.001847"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.269456" elapsed="0.002045"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.271543" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:40.271696" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:40.268161" elapsed="0.003559"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.267860" elapsed="0.003892"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.271923" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.271777" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.267841" elapsed="0.004180"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.272592" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.272159" elapsed="0.000460"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.272667" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.264353" elapsed="0.008437"/>
</kw>
<msg time="2026-04-26T00:08:40.272882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.252182" elapsed="0.020753"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.284810" elapsed="0.000048"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.296686" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.308552" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.308779" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.308983" 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-26T00:08:40.309339" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.309200" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.309185" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.309553" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.309713" 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-26T00:08:40.309872" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.309157" elapsed="0.000767"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.309059" elapsed="0.000891"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.310113" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.310188" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.310323" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:40.247797" elapsed="0.062566"/>
</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-26T00:08:40.334838" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.334465" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.335583" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.335368" elapsed="0.000278">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.335737" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.335043" elapsed="0.000718"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.336314" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:40.335916" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.336626" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.336747" 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-26T00:08:40.336494" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.337206" 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-26T00:08:40.336923" elapsed="0.000330"/>
</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-26T00:08:40.337601" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.337319" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.338184" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</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-26T00:08:40.337866" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.337719" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.337299" elapsed="0.000968"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.338931" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:40.338408" elapsed="0.000566"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.339025" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.333847" elapsed="0.005303"/>
</kw>
<msg time="2026-04-26T00:08:40.339203" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.321311" elapsed="0.017943"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.351151" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.363078" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.374927" elapsed="0.000039"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.375131" 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-26T00:08:40.375299" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.375650" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.375512" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.375497" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.375862" 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-26T00:08:40.376044" 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-26T00:08:40.376205" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.375470" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.375372" elapsed="0.000911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.376419" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.376493" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.376634" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:40.320287" elapsed="0.056423"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.378250" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.378012" elapsed="0.000300">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.378403" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.377657" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.378736" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.378498" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.379287" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.378991" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.378816" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.378479" elapsed="0.000891"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.381815" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.379515" elapsed="0.002327"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:40.381894" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:40.382095" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:40.377208" elapsed="0.004926"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.383874" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.383622" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.384319" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:40.384082" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.384749" 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-26T00:08:40.384509" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.385235" 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-26T00:08:40.384938" elapsed="0.000340"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:40.386083" 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-26T00:08:40.385864" elapsed="0.000245"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:40.386427" 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-26T00:08:40.386256" elapsed="0.000196"/>
</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-26T00:08:40.386594" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.387203" 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-26T00:08:40.386939" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:40.387289" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.387443" 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-26T00:08:40.385472" elapsed="0.001995"/>
</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-26T00:08:40.394498" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.394785" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494402&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.394999" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:40.389588" elapsed="0.005451"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.387537" elapsed="0.007569"/>
</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-26T00:08:40.395352" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.395144" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.387519" elapsed="0.007957"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.400288" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494402&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.396887" elapsed="0.003470"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.396588" elapsed="0.003818"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.396562" elapsed="0.003880"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.403452" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.400817" elapsed="0.002681"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.400519" elapsed="0.003014"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.400496" elapsed="0.003061"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.404099" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.403713" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.404424" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.404197" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.404954" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.404659" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.404505" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.404178" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.405575" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.405218" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.405893" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.405670" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.406435" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.406144" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.405990" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.405652" elapsed="0.000863"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.406656" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:40.407443" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.407174" elapsed="0.000295"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.407615" elapsed="0.002293"/>
</kw>
<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="PASS" start="2026-04-26T00:08:40.395976" elapsed="0.014011"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:40.410168" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.410061" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.410042" elapsed="0.000210"/>
</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-26T00:08:40.410392" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.410460" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:40.412680" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494402&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.382562" elapsed="0.030162"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.412901" elapsed="0.000096"/>
</return>
<msg time="2026-04-26T00:08:40.413243" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494402&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.234814" elapsed="0.178510"/>
</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-26T00:08:40.414075" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.413514" elapsed="0.000661"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.413494" elapsed="0.000729"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.414272" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.414538" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1494402&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:40.229365" elapsed="0.185202"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:40.415167" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b0989a0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:40.414724" elapsed="0.000471"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.415736" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.415345" elapsed="0.000417"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.416322" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.415913" elapsed="0.000435"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.417043" elapsed="0.000634"/>
</kw>
<msg time="2026-04-26T00:08:40.417812" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.417857" level="INFO">${publish_count} = 1494402</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.416504" elapsed="0.001376"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.418334" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.417980" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.417937" elapsed="0.000569"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.419232" level="INFO">${publish_count} = 1494402</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.418649" elapsed="0.000610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.420579" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.419939" elapsed="0.000826">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:40.420907" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:40.420952" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.419421" elapsed="0.001571"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.421366" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.421069" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.421050" elapsed="0.000491"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.427145" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.421684" elapsed="0.005488"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:40.427418" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.427647" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:40.427738" level="INFO">${publ_count} = 1494402</msg>
<msg time="2026-04-26T00:08:40.427781" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:40.226112" elapsed="0.201693"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.427979" elapsed="0.000234"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.428366" elapsed="0.006363"/>
</kw>
<var name="${index}">11</var>
<status status="PASS" start="2026-04-26T00:08:40.225723" elapsed="0.209046"/>
</iter>
<iter>
<kw name="Check_Publish_Notifications" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.436985" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.436234" elapsed="0.000835"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:40.437213" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:40.437479" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:40.435756" elapsed="0.001749"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.438191" level="INFO">&amp;{mapping} = { ID=working-pair-12 }</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-26T00:08:40.437662" elapsed="0.000557"/>
</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-26T00:08:40.474374" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.474002" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.475139" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.474878" elapsed="0.000334">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.475305" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.474557" elapsed="0.000772"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.475861" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.475485" elapsed="0.000403"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.476193" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.476319" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:40.476058" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.476730" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.476491" elapsed="0.000282"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.477871" level="INFO">mapping: {'ID': 'working-pair-12'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.477477" elapsed="0.000440"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.478346" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.478086" elapsed="0.000286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.479017" level="INFO">${value} = working-pair-12</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:40.478708" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:40.479743" level="INFO">${encoded} = working-pair-12</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-26T00:08:40.479533" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:40.479817" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.479981" level="INFO">${encoded_value} = working-pair-12</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-26T00:08:40.479225" elapsed="0.000782"/>
</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-26T00:08:40.480152" elapsed="0.000222"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-12</var>
<status status="PASS" start="2026-04-26T00:08:40.478583" elapsed="0.001866"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.478420" elapsed="0.002067"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.480530" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.480688" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:40.477141" elapsed="0.003572"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.476839" elapsed="0.003905"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.480912" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.480769" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.476820" elapsed="0.004186"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.481604" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.481144" elapsed="0.000487"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.481679" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.473382" elapsed="0.008418"/>
</kw>
<msg time="2026-04-26T00:08:40.481850" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.461272" elapsed="0.020628"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.493692" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.505455" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.517135" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.517338" 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-26T00:08:40.517507" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.517857" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.517720" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.517706" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.518088" 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-26T00:08:40.518249" 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-26T00:08:40.518408" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.517678" elapsed="0.000782"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.517580" elapsed="0.000905"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.518660" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.518738" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.518873" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</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-26T00:08:40.456952" elapsed="0.061962"/>
</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-26T00:08:40.543421" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.543039" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.544166" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/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-26T00:08:40.543934" elapsed="0.000293">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.544319" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.543607" elapsed="0.000736"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.544874" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/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-26T00:08:40.544499" elapsed="0.000401"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.545203" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.545324" 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-26T00:08:40.545069" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.545781" 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-26T00:08:40.545534" elapsed="0.000292"/>
</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-26T00:08:40.546204" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.545893" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.546711" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</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-26T00:08:40.546425" elapsed="0.000312"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.546286" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.545874" elapsed="0.000918"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.547476" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:40.546929" elapsed="0.000576"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.547554" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.542360" elapsed="0.005317"/>
</kw>
<msg time="2026-04-26T00:08:40.547728" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.529706" elapsed="0.018073"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.559496" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.571259" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.582995" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.583185" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.583353" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.583706" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.583568" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.583553" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.583917" 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-26T00:08:40.584101" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.584262" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.583526" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.583427" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.584482" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.584560" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.584708" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:40.528700" elapsed="0.056051"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.586276" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.586039" elapsed="0.000299">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.586429" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.585688" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.586767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.586523" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.587318" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.587024" elapsed="0.000352"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.586847" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.586504" elapsed="0.000931"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.589896" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.587581" elapsed="0.002341"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:40.589989" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:40.590169" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/check_publish_notifications/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:40.585208" elapsed="0.005000"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.591943" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.591688" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.592389" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:40.592152" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.592816" 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-26T00:08:40.592577" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.593279" 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-26T00:08:40.593039" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:40.594147" 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-26T00:08:40.593940" elapsed="0.000233"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:40.594490" 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-26T00:08:40.594320" elapsed="0.000196"/>
</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-26T00:08:40.594657" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.595286" 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-26T00:08:40.595032" elapsed="0.000298"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:40.595372" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.595524" 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-26T00:08:40.593545" elapsed="0.002004"/>
</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-26T00:08:40.602197" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.602354" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:check-publish-notifications 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '144'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.602485" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:40.597646" elapsed="0.004874"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.595619" elapsed="0.006965"/>
</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-26T00:08:40.602831" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.602620" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.595601" elapsed="0.007375"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.608777" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.604372" elapsed="0.004475"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.604067" elapsed="0.004829"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.604041" elapsed="0.004889"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.611830" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.609337" elapsed="0.002539"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.609029" elapsed="0.002881"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.609004" elapsed="0.002931"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.612511" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.612139" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.612836" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.612609" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.613387" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.613086" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.612917" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.612591" elapsed="0.000880"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.614021" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.613645" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.614344" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.614118" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.614868" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.614578" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.614425" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.614100" elapsed="0.000848"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.615108" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:40.615875" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.615605" elapsed="0.000296"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.616066" elapsed="0.002293"/>
</kw>
<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="PASS" start="2026-04-26T00:08:40.603446" elapsed="0.014977"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:40.618602" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.618496" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.618477" elapsed="0.000208"/>
</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-26T00:08:40.618824" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.618891" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.621130" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.590627" elapsed="0.030548"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.621312" elapsed="0.000073"/>
</return>
<msg time="2026-04-26T00:08:40.621629" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.443940" elapsed="0.177769"/>
</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-26T00:08:40.622462" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.621897" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.621878" elapsed="0.000732"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.622659" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:40.622922" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;publish-count&gt;1500002&lt;/publish-count&gt;&lt;active&gt;false&lt;/active&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${CHECK_PUBLISH_NOTIFICATIONS_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="PASS" start="2026-04-26T00:08:40.438493" elapsed="0.184510"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:40.623594" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b993ba0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:40.623168" elapsed="0.000454"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.624188" level="INFO">${active} = false</msg>
<var>${active}</var>
<arg>${xml}</arg>
<arg>xpath=active</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.623774" elapsed="0.000441"/>
</kw>
<kw name="Convert To Boolean" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.624774" level="INFO">${active} = False</msg>
<var>${active}</var>
<arg>${active}</arg>
<doc>Converts the given item to Boolean ``True`` or ``False``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.624375" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.625531" elapsed="0.000632"/>
</kw>
<msg time="2026-04-26T00:08:40.626300" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.626346" level="INFO">${publish_count} = 1500002</msg>
<var>${status}</var>
<var>${publish_count}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=publish-count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.624976" elapsed="0.001393"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${publish_count}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'publish-count' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${publish_count}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.626731" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.626447" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.626427" elapsed="0.000480"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.627676" level="INFO">${publish_count} = 1500002</msg>
<var>${publish_count}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${publish_count}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.627108" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.629049" level="FAIL">No element matching 'last-error' found.</msg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.628411" elapsed="0.000826">No element matching 'last-error' found.</status>
</kw>
<msg time="2026-04-26T00:08:40.629378" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-26T00:08:40.629424" level="INFO">${last_error} = No element matching 'last-error' found.</msg>
<var>${status}</var>
<var>${last_error}</var>
<arg>XML.Get_Element_Text</arg>
<arg>${xml}</arg>
<arg>xpath=last-error</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.627866" elapsed="0.001581"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${status}&quot;&quot;&quot; == &quot;&quot;&quot;FAIL&quot;&quot;&quot; and &quot;&quot;&quot;${last_error}&quot;&quot;&quot; != &quot;&quot;&quot;No element matching 'last-error' found.&quot;&quot;&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${last_error}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.629825" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.629543" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.629523" elapsed="0.000493"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.635516" level="INFO">${last_error} = </msg>
<var>${last_error}</var>
<arg>"""${status}""" == """FAIL"""</arg>
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.630161" elapsed="0.005382"/>
</kw>
<return>
<value>${active}</value>
<value>${publish_count}</value>
<value>${last_error}</value>
<status status="PASS" start="2026-04-26T00:08:40.635595" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:40.635823" level="INFO">${active} = False</msg>
<msg time="2026-04-26T00:08:40.635868" level="INFO">${publ_count} = 1500002</msg>
<msg time="2026-04-26T00:08:40.635909" level="INFO">${last_error} = </msg>
<var>${active}</var>
<var>${publ_count}</var>
<var>${last_error}</var>
<arg>${node_to_ask}</arg>
<arg>${DNB_PUBLISHER_LISTENER_PREFIX}${index}</arg>
<doc>Publishing notifications check by invoking check-publish-notifications rpc. Return publising process state details.</doc>
<status status="PASS" start="2026-04-26T00:08:40.435257" elapsed="0.200675"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${active_list}</arg>
<arg>${active}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.636106" elapsed="0.000227"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${EMPTY}</arg>
<arg>${last_error}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.636486" elapsed="0.006138"/>
</kw>
<var name="${index}">12</var>
<status status="PASS" start="2026-04-26T00:08:40.434870" elapsed="0.207794"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${nr_pairs}+1</value>
<status status="PASS" start="2026-04-26T00:08:38.126671" elapsed="2.516025"/>
</for>
<return>
<value>${active_list}</value>
<status status="PASS" start="2026-04-26T00:08:40.642742" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-26T00:08:38.125102" elapsed="2.517769"/>
</kw>
<msg time="2026-04-26T00:08:40.643153" level="INFO">${result} = [False, False, False, False, False, False, False, False, False, False, False, False]</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-26T00:08:38.123916" elapsed="2.519268"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-26T00:08:40.643235" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-26T00:08:38.121538" elapsed="2.521819"/>
</kw>
<msg time="2026-04-26T00:08:40.643452" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.643572" level="INFO">${message} = [False, False, False, False, False, False, False, False, False, False, False, False]</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:38.120271" elapsed="2.523327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.643760" elapsed="0.040355"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-26T00:08:40.685207" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.685073" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.685050" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.685462" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [False, False, False, False, False, False, False, False, False, False, False, False].</doc>
<status status="PASS" start="2026-04-26T00:08:40.684638" elapsed="0.000907"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:08:40.685589" elapsed="0.000042"/>
</return>
<msg time="2026-04-26T00:08:40.685761" level="INFO">${data} = [False, False, False, False, False, False, False, False, False, False, False, False]</msg>
<var>${data}</var>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-26T00:08:38.119200" elapsed="2.566588"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Argument" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.688127" level="INFO">${keyword} = Check_Notifications_Active_Status</msg>
<msg time="2026-04-26T00:08:40.688177" level="INFO">${args} = [[True, True, True, True, True, True, True, True, True, True, True, True]]</msg>
<msg time="2026-04-26T00:08:40.688222" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.687796" elapsed="0.000449"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${argument}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.688398" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Check_Notifications_Active_Status" owner="DnbCommons">
<for flavor="IN">
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.689818" elapsed="0.000558"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.689686" elapsed="0.000729"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.690628" elapsed="0.000505"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.690498" elapsed="0.000674"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.691383" elapsed="0.000476"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.691253" elapsed="0.000646"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.692132" elapsed="0.000478"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.691997" elapsed="0.000653"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.692859" elapsed="0.000491"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.692732" elapsed="0.000656"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.693599" elapsed="0.000510"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.693470" elapsed="0.000678"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.694356" elapsed="0.000638"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.694228" elapsed="0.000812"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.695254" elapsed="0.000480"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.695124" elapsed="0.000650"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.696000" elapsed="0.000476"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.695855" elapsed="0.000661"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.696725" elapsed="0.000487"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.696597" elapsed="0.000654"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.697459" elapsed="0.000551"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.697331" elapsed="0.000727"/>
</iter>
<iter>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${False}</arg>
<arg>${active}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-26T00:08:40.698266" elapsed="0.000461"/>
</kw>
<var name="${active}">False</var>
<status status="PASS" start="2026-04-26T00:08:40.698138" elapsed="0.000627"/>
</iter>
<var>${active}</var>
<value>@{active_list}</value>
<status status="PASS" start="2026-04-26T00:08:40.689519" elapsed="0.009275"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<status status="PASS" start="2026-04-26T00:08:40.689255" elapsed="0.009593"/>
</kw>
<msg time="2026-04-26T00:08:40.698929" level="INFO">${result} = None</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-26T00:08:40.688767" elapsed="0.010186"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-26T00:08:40.699029" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first positional argument.</doc>
<status status="PASS" start="2026-04-26T00:08:40.687420" elapsed="0.011736"/>
</kw>
<msg time="2026-04-26T00:08:40.699247" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.699290" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.686884" elapsed="0.012429"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.699516" elapsed="0.037512"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-26T00:08:40.738077" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.737919" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.737895" elapsed="0.000278"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.738329" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with None.</doc>
<status status="PASS" start="2026-04-26T00:08:40.737458" elapsed="0.000956"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:08:40.738459" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-26T00:08:40.686444" elapsed="0.052138"/>
</kw>
<msg time="2026-04-26T00:08:40.738685" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:08:40.738732" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Argument</arg>
<arg>${stateless_validator}</arg>
<arg>${data}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:08:40.685953" elapsed="0.052802"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:08:40.738941" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.738834" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.738816" elapsed="0.000231"/>
</if>
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>message=Last validator message: ${message}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.739263" elapsed="0.000025"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.739438" elapsed="0.000021"/>
</kw>
<var name="${i}">1.0</var>
<status status="PASS" start="2026-04-26T00:08:38.118630" elapsed="2.620863"/>
</iter>
<var>${i}</var>
<value>${iterations}</value>
<status status="PASS" start="2026-04-25T23:58:35.481477" elapsed="605.258052"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.739673" elapsed="0.000021"/>
</kw>
<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="PASS" start="2026-04-25T23:58:35.476670" elapsed="605.263122"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.741890" level="INFO">${sum_local_number} = 0</msg>
<var>${sum_local_number}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.739950" elapsed="0.001968"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.742447" level="INFO">${low_limit_pair_rate} = 4500.0</msg>
<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="PASS" start="2026-04-26T00:08:40.742093" elapsed="0.000381"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.742976" level="INFO">${high_limit_pair_rate} = 5500.0</msg>
<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="PASS" start="2026-04-26T00:08:40.742626" elapsed="0.000378"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.748015" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.747697" elapsed="0.000349"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:40.748093" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:40.748242" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:40.747350" elapsed="0.000917"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.748900" 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-26T00:08:40.748428" elapsed="0.000504"/>
</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-26T00:08:40.782890" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.782342" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.784225" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.783668" elapsed="0.000663">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.784466" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.783187" elapsed="0.001315"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.785404" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:40.784816" elapsed="0.000627"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.785936" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.786171" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:40.785667" elapsed="0.000541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.786787" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.786429" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.788136" 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-26T00:08:40.787633" elapsed="0.000550"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.788766" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.788341" elapsed="0.000452"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.789914" 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-26T00:08:40.789213" elapsed="0.000769"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:40.791667" 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-26T00:08:40.791271" elapsed="0.000434"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:40.791785" elapsed="0.000078"/>
</return>
<msg time="2026-04-26T00:08:40.792157" 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-26T00:08:40.790446" elapsed="0.001752"/>
</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-26T00:08:40.792426" elapsed="0.000553"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-1</var>
<status status="PASS" start="2026-04-26T00:08:40.789048" elapsed="0.004036"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.788844" elapsed="0.004279"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.793168" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.793328" level="INFO">${mapping_to_use} = {'ID': 'working-pair-1'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:40.787306" elapsed="0.006048"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.786951" elapsed="0.006435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.793556" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.793412" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.786923" elapsed="0.006710"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.794491" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:40.793773" elapsed="0.000747"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.794572" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.781560" elapsed="0.013140"/>
</kw>
<msg time="2026-04-26T00:08:40.794753" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.769226" elapsed="0.025578"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.808944" elapsed="0.000046"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.821047" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.832946" elapsed="0.000040"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.833153" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.833324" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.833687" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.833546" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.833531" elapsed="0.000236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.833924" 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-26T00:08:40.834110" 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-26T00:08:40.834271" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.833502" elapsed="0.000821"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.833401" elapsed="0.000948"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.834490" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.834564" elapsed="0.000017"/>
</return>
<msg time="2026-04-26T00:08:40.834678" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:40.764511" elapsed="0.070193"/>
</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-26T00:08:40.858623" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:40.858248" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.859449" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:40.859151" elapsed="0.000369">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.859613" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.858808" elapsed="0.000829"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.860198" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:40.859794" elapsed="0.000431"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.860511" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.860647" 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-26T00:08:40.860379" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.861132" 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-26T00:08:40.860864" elapsed="0.000314"/>
</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-26T00:08:40.861536" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.861245" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.862104" 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-26T00:08:40.861761" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.861620" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.861226" elapsed="0.000963"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.862877" 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-26T00:08:40.862330" elapsed="0.000575"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.862955" elapsed="0.000051"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.857570" elapsed="0.005534"/>
</kw>
<msg time="2026-04-26T00:08:40.863156" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.845335" elapsed="0.017869"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.875538" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.887498" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.899458" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.899648" 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-26T00:08:40.899817" 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-26T00:08:40.900193" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.900049" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:40.900034" 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-26T00:08:40.900404" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.900564" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.900723" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:40.900005" elapsed="0.000804"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.899889" elapsed="0.000948"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.900994" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.901072" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.901194" 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-26T00:08:40.844471" elapsed="0.056751"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.902478" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:40.902243" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.902633" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.901868" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.902982" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.902727" elapsed="0.000318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.903527" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.903239" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.903069" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.902709" elapsed="0.000900"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.905868" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:40.903753" elapsed="0.002142"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:40.905945" elapsed="0.000043"/>
</return>
<msg time="2026-04-26T00:08:40.906128" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:40.901550" elapsed="0.004603"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.907648" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.907404" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.908091" 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-26T00:08:40.907840" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.908522" 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-26T00:08:40.908282" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.908943" 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-26T00:08:40.908708" elapsed="0.000295"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:40.909780" 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-26T00:08:40.909591" elapsed="0.000215"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:40.910169" 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-26T00:08:40.909954" elapsed="0.000241"/>
</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-26T00:08:40.910338" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.910926" 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-26T00:08:40.910685" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:40.911028" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:40.911182" 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-26T00:08:40.909198" elapsed="0.002009"/>
</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-26T00:08:40.919564" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&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>
<msg time="2026-04-26T00:08:40.919919" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499543&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499543&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:40.920111" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:40.913505" elapsed="0.006646"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.911315" elapsed="0.008901"/>
</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-26T00:08:40.920463" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.920254" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.911296" elapsed="0.009295"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.925256" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499543&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499543&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.922046" elapsed="0.003282"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.921721" elapsed="0.003655"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.921696" elapsed="0.003716"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.928468" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.925788" elapsed="0.002727"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.925489" elapsed="0.003061"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.925466" elapsed="0.003109"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.929129" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.928732" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.929459" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.929228" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.930017" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.929696" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.929542" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.929209" elapsed="0.000909"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.930637" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.930274" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.930974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.930734" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.931509" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.931215" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.931062" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.930716" elapsed="0.000877"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.931736" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:40.932527" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:40.932251" elapsed="0.000303"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.932702" elapsed="0.002348"/>
</kw>
<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="PASS" start="2026-04-26T00:08:40.921109" elapsed="0.014006"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:40.935300" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:40.935191" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.935171" elapsed="0.000253"/>
</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-26T00:08:40.935567" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:40.935636" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:40.937854" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499543&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499543&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.906471" elapsed="0.031414"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.937956" elapsed="0.000043"/>
</return>
<msg time="2026-04-26T00:08:40.938152" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499543&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499543&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.753649" elapsed="0.184532"/>
</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-26T00:08:40.938522" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.938287" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.938269" elapsed="0.000348"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.938651" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:40.938805" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499543&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499543&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:40.749210" elapsed="0.189624"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:40.939353" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aaf8630&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:40.939010" elapsed="0.000369"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.939819" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.939530" elapsed="0.000315"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.940294" level="INFO">${id_not} = 1499543</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.940012" elapsed="0.000308"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.940749" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.940471" elapsed="0.000304"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:40.941227" level="INFO">${local_number} = 1499543</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:40.940925" elapsed="0.000328"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:40.941300" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.941561" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:40.941606" level="INFO">${id_not} = 1499543</msg>
<msg time="2026-04-26T00:08:40.941647" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:40.941688" level="INFO">${local_number} = 1499543</msg>
<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="PASS" start="2026-04-26T00:08:40.746875" elapsed="0.194836"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.943910" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:40.941874" elapsed="0.002108"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.945954" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:40.944135" elapsed="0.001892"/>
</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="PASS" start="2026-04-26T00:08:40.946199" elapsed="0.000325"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.947060" level="INFO">${rate} = 4998.4766666666665</msg>
<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="PASS" start="2026-04-26T00:08:40.946680" elapsed="0.000443"/>
</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="PASS" start="2026-04-26T00:08:40.947278" elapsed="0.000335"/>
</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="PASS" start="2026-04-26T00:08:40.947764" elapsed="0.000345"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.948617" level="INFO">${sum_local_number} = 1499543</msg>
<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="PASS" start="2026-04-26T00:08:40.948262" elapsed="0.000382"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:08:40.743276" elapsed="0.205405"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.953428" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.953133" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:40.953500" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.953646" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:40.952780" elapsed="0.000890"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.954425" level="INFO">&amp;{mapping} = { ID=working-pair-2 }</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-26T00:08:40.953826" elapsed="0.000641"/>
</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-26T00:08:40.987201" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:40.986811" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.988027" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:40.987713" elapsed="0.000394">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:40.988202" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:40.987386" elapsed="0.000841"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.988766" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:40.988385" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:40.989109" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:40.989249" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:40.988946" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.989675" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.989431" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.990912" level="INFO">mapping: {'ID': 'working-pair-2'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:40.990452" elapsed="0.000505"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.991538" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:40.991128" elapsed="0.000436"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.992606" level="INFO">${value} = working-pair-2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:40.991936" elapsed="0.000712"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:40.994324" level="INFO">${encoded} = working-pair-2</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-26T00:08:40.993912" elapsed="0.000453"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:40.994442" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:40.994781" level="INFO">${encoded_value} = working-pair-2</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-26T00:08:40.993122" elapsed="0.001699"/>
</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-26T00:08:40.995056" elapsed="0.000515"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-2</var>
<status status="PASS" start="2026-04-26T00:08:40.991776" elapsed="0.003938"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.991611" elapsed="0.004143"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:40.995798" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:40.995957" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:40.990091" elapsed="0.005908"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:40.989786" elapsed="0.006248"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:40.996208" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:40.996063" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:40.989766" elapsed="0.006519"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:40.996852" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:40.996421" elapsed="0.000458"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:40.996927" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:40.986184" elapsed="0.010884"/>
</kw>
<msg time="2026-04-26T00:08:40.997120" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:40.973900" elapsed="0.023269"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.009377" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.021186" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.033076" 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-26T00:08:41.033263" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.033430" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.033779" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.033643" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.033628" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.034007" 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-26T00:08:41.034169" 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-26T00:08:41.034342" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.033601" elapsed="0.000795"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.033501" elapsed="0.000920"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.034558" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.034669" elapsed="0.000017"/>
</return>
<msg time="2026-04-26T00:08:41.034781" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:40.969805" elapsed="0.065002"/>
</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-26T00:08:41.058650" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.058254" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.059465" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.059181" elapsed="0.000347">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.059620" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.058835" elapsed="0.000809"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.060204" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.059801" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.060516" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.060653" 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-26T00:08:41.060385" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.061091" 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-26T00:08:41.060830" elapsed="0.000306"/>
</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-26T00:08:41.061481" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.061201" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.062007" level="INFO">${mapping_to_use} = {'ID': 'working-pair-2'}</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-26T00:08:41.061702" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.061564" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.061182" elapsed="0.000907"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.062785" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:41.062228" elapsed="0.000586"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.062862" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.057635" elapsed="0.005367"/>
</kw>
<msg time="2026-04-26T00:08:41.063056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.045470" elapsed="0.017634"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.075320" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.087194" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.099020" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.099215" 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-26T00:08:41.099383" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.099737" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.099598" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.099584" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.099949" elapsed="0.000036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.100129" 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-26T00:08:41.100288" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.099557" elapsed="0.000782"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.099456" elapsed="0.000909"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.100504" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.100576" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:41.100692" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:41.044622" elapsed="0.056097"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.101931" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.101701" elapsed="0.000309">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.102108" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.101372" elapsed="0.000760"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.102468" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.102202" elapsed="0.000324"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.103008" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.102705" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.102550" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.102183" elapsed="0.000913"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.105351" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:41.103239" elapsed="0.002139"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:41.105427" elapsed="0.000063"/>
</return>
<msg time="2026-04-26T00:08:41.105621" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:41.101057" elapsed="0.004589"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.107172" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.106910" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.107598" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&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-26T00:08:41.107363" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.108084" 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-26T00:08:41.107820" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.108508" 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-26T00:08:41.108271" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:41.109351" 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-26T00:08:41.109157" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:41.109695" 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-26T00:08:41.109524" elapsed="0.000196"/>
</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-26T00:08:41.109861" elapsed="0.000217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.110499" 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-26T00:08:41.110227" elapsed="0.000317"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:41.110586" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.110740" 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-26T00:08:41.108746" elapsed="0.002018"/>
</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-26T00:08:41.117732" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-2&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.118003" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.118102" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:41.113037" elapsed="0.005091"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.110834" elapsed="0.007338"/>
</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-26T00:08:41.118344" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.118198" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.110816" elapsed="0.007614"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.122878" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.119645" elapsed="0.003303"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.119346" elapsed="0.003670"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.119321" elapsed="0.003732"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.126639" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.123432" elapsed="0.003271"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.123130" elapsed="0.003620"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.123107" elapsed="0.003678"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.127405" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.127023" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.127729" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.127501" elapsed="0.000318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.128321" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.128020" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.127846" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.127483" elapsed="0.000921"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.128915" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.128556" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.129257" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.129028" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.129785" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.129491" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.129338" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.129009" elapsed="0.000859"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.130029" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:41.130839" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.130555" elapsed="0.000310"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.131030" elapsed="0.002297"/>
</kw>
<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="PASS" start="2026-04-26T00:08:41.118802" elapsed="0.014588"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:41.133569" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:41.133463" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.133444" elapsed="0.000210"/>
</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-26T00:08:41.133797" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.133865" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.136114" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.105975" elapsed="0.030169"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.136215" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.136367" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:40.959031" elapsed="0.177364"/>
</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-26T00:08:41.136728" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.136498" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.136480" elapsed="0.000339"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.136852" elapsed="0.000025"/>
</return>
<msg time="2026-04-26T00:08:41.137018" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:40.954748" elapsed="0.182300"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:41.137573" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0b09af70&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:41.137249" elapsed="0.000352"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.138055" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.137753" elapsed="0.000329"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.138541" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.138236" elapsed="0.000332"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.139020" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.138725" elapsed="0.000321"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.139476" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.139198" elapsed="0.000303"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:41.139549" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.139804" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:41.139847" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-26T00:08:41.139887" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:41.139927" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-26T00:08:40.952324" elapsed="0.187625"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.142117" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.140126" elapsed="0.002048"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.144205" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.142325" elapsed="0.001936"/>
</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="PASS" start="2026-04-26T00:08:41.144412" elapsed="0.000314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.145257" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-26T00:08:41.144879" elapsed="0.000404"/>
</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="PASS" start="2026-04-26T00:08:41.145433" elapsed="0.000322"/>
</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="PASS" start="2026-04-26T00:08:41.145904" elapsed="0.000445"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.146864" level="INFO">${sum_local_number} = 2999544</msg>
<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="PASS" start="2026-04-26T00:08:41.146501" elapsed="0.000389"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:08:40.948809" elapsed="0.198117"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.151670" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.151378" elapsed="0.000318"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:41.151741" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.151887" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:41.151041" elapsed="0.000870"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.152450" level="INFO">&amp;{mapping} = { ID=working-pair-3 }</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-26T00:08:41.152080" elapsed="0.000397"/>
</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-26T00:08:41.185070" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.184684" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.185866" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:41.185579" elapsed="0.000351">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.186047" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.185256" elapsed="0.000816"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.186621" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.186230" elapsed="0.000456"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.187001" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.187132" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:41.186849" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.187551" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.187309" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.188743" level="INFO">mapping: {'ID': 'working-pair-3'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.188284" elapsed="0.000504"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.189399" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.188987" elapsed="0.000439"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.190477" level="INFO">${value} = working-pair-3</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:41.189796" elapsed="0.000722"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:41.192181" level="INFO">${encoded} = working-pair-3</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-26T00:08:41.191793" elapsed="0.000424"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:41.192293" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:41.192628" level="INFO">${encoded_value} = working-pair-3</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-26T00:08:41.191009" elapsed="0.001659"/>
</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-26T00:08:41.192887" elapsed="0.000528"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-3</var>
<status status="PASS" start="2026-04-26T00:08:41.189637" elapsed="0.003878"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.189475" elapsed="0.004077"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.193594" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.193749" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:41.187948" elapsed="0.005826"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.187663" elapsed="0.006143"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.194002" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.193831" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.187643" elapsed="0.006436"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.194660" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.194217" elapsed="0.000470"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.194735" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.184078" elapsed="0.010779"/>
</kw>
<msg time="2026-04-26T00:08:41.194908" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.171804" elapsed="0.023165"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.208066" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.219927" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.231870" 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-26T00:08:41.232077" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.232249" 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-26T00:08:41.232608" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.232468" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.232453" 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-26T00:08:41.232825" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.233004" 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-26T00:08:41.233168" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.232424" elapsed="0.000800"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.232324" elapsed="0.000925"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.233390" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.233467" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:41.233578" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.167647" elapsed="0.065957"/>
</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-26T00:08:41.257599" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.257221" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.258423" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.258133" elapsed="0.000355">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.258584" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.257785" elapsed="0.000824"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.259214" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.258786" elapsed="0.000456"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.259534" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.259659" 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-26T00:08:41.259399" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.260100" 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-26T00:08:41.259837" elapsed="0.000311"/>
</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-26T00:08:41.260503" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.260216" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.261080" level="INFO">${mapping_to_use} = {'ID': 'working-pair-3'}</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-26T00:08:41.260768" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.260624" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.260197" elapsed="0.000969"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.261832" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:41.261307" elapsed="0.000554"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.261911" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.256598" elapsed="0.005456"/>
</kw>
<msg time="2026-04-26T00:08:41.262108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.244472" elapsed="0.017685"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.274286" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.286331" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.298257" 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-26T00:08:41.298448" 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-26T00:08:41.298617" 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-26T00:08:41.299011" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.298854" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.298839" elapsed="0.000252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.299225" 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-26T00:08:41.299387" 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-26T00:08:41.299546" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.298791" elapsed="0.000807"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.298690" elapsed="0.000933"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.299761" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.299834" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.300001" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:41.243617" elapsed="0.056414"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.301258" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.301019" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.301415" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.300673" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.301746" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.301509" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.302293" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.301998" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.301826" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.301491" elapsed="0.000884"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.304670" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:41.302519" elapsed="0.002178"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:41.304748" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.304902" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:41.300356" elapsed="0.004571"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.306443" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.306197" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.306888" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&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-26T00:08:41.306637" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.307347" 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-26T00:08:41.307103" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.307769" 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-26T00:08:41.307534" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:41.308600" 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-26T00:08:41.308414" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:41.308942" 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-26T00:08:41.308771" elapsed="0.000211"/>
</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-26T00:08:41.309125" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.309710" 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-26T00:08:41.309466" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:41.309795" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.309948" 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-26T00:08:41.308020" elapsed="0.001968"/>
</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-26T00:08:41.316554" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-3&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.316828" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495337&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495337&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.316938" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:41.312277" elapsed="0.004708"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.310061" elapsed="0.006972"/>
</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-26T00:08:41.317207" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.317059" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.310042" elapsed="0.007254"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.321274" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495337&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495337&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.318311" elapsed="0.003034"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.318092" elapsed="0.003302"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.318072" elapsed="0.003357"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.325046" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.321806" elapsed="0.003305"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.321507" elapsed="0.003652"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.321483" elapsed="0.003711"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.325932" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.325412" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.326422" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.326094" elapsed="0.000409"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.327252" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.326757" elapsed="0.000533"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.326538" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.326068" elapsed="0.001303"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.328119" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.327587" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.328573" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.328255" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.329137" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.328825" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.328670" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.328229" elapsed="0.000997"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.329371" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:41.330164" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.329874" elapsed="0.000317"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.330341" elapsed="0.002373"/>
</kw>
<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="PASS" start="2026-04-26T00:08:41.317641" elapsed="0.015138"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:41.332975" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-26T00:08:41.332853" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.332834" elapsed="0.000231"/>
</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-26T00:08:41.333209" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.333277" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.335535" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495337&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495337&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.305259" elapsed="0.030344"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.335677" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.335834" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495337&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495337&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.156943" elapsed="0.178920"/>
</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-26T00:08:41.336218" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.335982" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.335949" elapsed="0.000364"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.336346" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:41.336498" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495337&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495337&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:41.152720" elapsed="0.183807"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:41.337028" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ab78040&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:41.336686" elapsed="0.000370"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.337497" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.337209" elapsed="0.000315"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.337970" level="INFO">${id_not} = 1495337</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.337676" elapsed="0.000322"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.338430" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.338150" elapsed="0.000306"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.338904" level="INFO">${local_number} = 1495337</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.338608" elapsed="0.000323"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:41.338993" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.339251" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:41.339296" level="INFO">${id_not} = 1495337</msg>
<msg time="2026-04-26T00:08:41.339337" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:41.339378" level="INFO">${local_number} = 1495337</msg>
<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="PASS" start="2026-04-26T00:08:41.150570" elapsed="0.188831"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.341573" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.339562" elapsed="0.002068"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.343664" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.341784" elapsed="0.001937"/>
</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="PASS" start="2026-04-26T00:08:41.343873" elapsed="0.000476"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.344868" level="INFO">${rate} = 4984.456666666667</msg>
<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="PASS" start="2026-04-26T00:08:41.344504" elapsed="0.000390"/>
</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="PASS" start="2026-04-26T00:08:41.345061" elapsed="0.000335"/>
</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="PASS" start="2026-04-26T00:08:41.345546" elapsed="0.000326"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.346404" level="INFO">${sum_local_number} = 4494881</msg>
<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="PASS" start="2026-04-26T00:08:41.346046" elapsed="0.000385"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:08:41.147064" elapsed="0.199440"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.351319" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.351015" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:41.351391" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.351540" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:41.350631" elapsed="0.000934"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.352116" level="INFO">&amp;{mapping} = { ID=working-pair-4 }</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-26T00:08:41.351720" elapsed="0.000424"/>
</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-26T00:08:41.385185" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.384793" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.386032" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:41.385695" elapsed="0.000409">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.386198" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.385371" elapsed="0.000851"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.386763" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.386381" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.387116" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.387245" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:41.386945" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.387660" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.387420" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.388854" level="INFO">mapping: {'ID': 'working-pair-4'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.388393" elapsed="0.000506"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.389496" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.389089" elapsed="0.000434"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.390570" level="INFO">${value} = working-pair-4</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:41.389894" elapsed="0.000717"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:41.392279" level="INFO">${encoded} = working-pair-4</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-26T00:08:41.391888" elapsed="0.000427"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:41.392391" elapsed="0.000073"/>
</return>
<msg time="2026-04-26T00:08:41.392727" level="INFO">${encoded_value} = working-pair-4</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-26T00:08:41.391103" elapsed="0.001663"/>
</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-26T00:08:41.392999" elapsed="0.000512"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-4</var>
<status status="PASS" start="2026-04-26T00:08:41.389736" elapsed="0.003874"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.389570" elapsed="0.004078"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.393690" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.393847" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:41.388074" elapsed="0.005798"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.387771" elapsed="0.006133"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.394105" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.393930" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.387752" elapsed="0.006465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.394792" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.394359" elapsed="0.000460"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.394868" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.384187" elapsed="0.010840"/>
</kw>
<msg time="2026-04-26T00:08:41.395081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.371653" elapsed="0.023483"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.407444" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.419381" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.431304" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.431495" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.431665" 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-26T00:08:41.432037" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.431882" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.431867" elapsed="0.000251"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.432254" 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-26T00:08:41.432418" 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-26T00:08:41.432579" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.431839" elapsed="0.000793"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.431737" elapsed="0.000922"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.432800" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.432874" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:41.433002" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.367451" elapsed="0.065578"/>
</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-26T00:08:41.456981" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.456591" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.457780" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.457496" elapsed="0.000348">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.457937" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.457169" elapsed="0.000814"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.458531" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.458149" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.458846" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.458984" 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-26T00:08:41.458712" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.459428" 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-26T00:08:41.459181" elapsed="0.000294"/>
</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-26T00:08:41.459828" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.459542" elapsed="0.000345"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.460364" level="INFO">${mapping_to_use} = {'ID': 'working-pair-4'}</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-26T00:08:41.460070" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.459913" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.459523" elapsed="0.000925"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.461128" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:41.460587" elapsed="0.000570"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.461207" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.455983" elapsed="0.005350"/>
</kw>
<msg time="2026-04-26T00:08:41.461386" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.443817" elapsed="0.017618"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.473533" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.485412" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.497418" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.497608" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.497777" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.498153" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.498011" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.497995" 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-26T00:08:41.498368" 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-26T00:08:41.498531" 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-26T00:08:41.498693" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.497952" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.497850" elapsed="0.000922"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.498911" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.499002" elapsed="0.000017"/>
</return>
<msg time="2026-04-26T00:08:41.499126" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:41.442936" elapsed="0.056218"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.500397" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.500164" elapsed="0.000296">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.500554" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.499816" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.500887" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.500648" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.501434" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.501143" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.500984" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.500630" elapsed="0.000888"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.503792" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:41.501663" elapsed="0.002155"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:41.503870" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.504039" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:41.499497" elapsed="0.004569"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.505574" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.505328" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.506063" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&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-26T00:08:41.505805" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.506506" 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-26T00:08:41.506262" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.506936" 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-26T00:08:41.506697" elapsed="0.000299"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:41.507798" 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-26T00:08:41.507609" elapsed="0.000215"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:41.508162" 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-26T00:08:41.507989" elapsed="0.000199"/>
</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-26T00:08:41.508333" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.508940" 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-26T00:08:41.508693" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:41.509044" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:41.509205" 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-26T00:08:41.507210" elapsed="0.002020"/>
</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-26T00:08:41.515698" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-4&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.515936" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494320&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494320&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.516056" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:41.511521" elapsed="0.004566"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.509301" elapsed="0.006833"/>
</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-26T00:08:41.516309" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.516161" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.509283" elapsed="0.007115"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.519720" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494320&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494320&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.517414" elapsed="0.002358"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.517200" elapsed="0.002607"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.517181" elapsed="0.002651"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.523322" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.520136" elapsed="0.003250"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.519887" elapsed="0.003547"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.519870" elapsed="0.003598"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.524223" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.523685" elapsed="0.000577"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.524676" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.524358" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.525445" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.525027" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.524792" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.524333" elapsed="0.001228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.526301" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.525772" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.526805" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.526485" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.527615" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.527162" elapsed="0.000490"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.526920" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.526458" elapsed="0.001273"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.527934" elapsed="0.000568"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:41.528942" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.528660" elapsed="0.000324"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.529133" elapsed="0.002277"/>
</kw>
<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="PASS" start="2026-04-26T00:08:41.516744" elapsed="0.014730"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:41.531653" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:41.531547" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.531528" elapsed="0.000210"/>
</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-26T00:08:41.531879" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.531946" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:08:41.534182" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494320&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494320&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.504388" elapsed="0.029824"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.534281" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.534432" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494320&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494320&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.356628" elapsed="0.177832"/>
</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-26T00:08:41.534790" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.534561" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.534544" elapsed="0.000338"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.534915" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:41.535081" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494320&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494320&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:41.352391" elapsed="0.182719"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:41.535610" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0aa70040&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:41.535291" elapsed="0.000346"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.536083" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.535785" elapsed="0.000324"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.536533" level="INFO">${id_not} = 1494320</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.536258" elapsed="0.000300"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.537044" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.536746" elapsed="0.000326"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.537503" level="INFO">${local_number} = 1494320</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.537225" elapsed="0.000303"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:41.537575" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.537830" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:41.537873" level="INFO">${id_not} = 1494320</msg>
<msg time="2026-04-26T00:08:41.537913" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:41.537953" level="INFO">${local_number} = 1494320</msg>
<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="PASS" start="2026-04-26T00:08:41.350167" elapsed="0.187825"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.540144" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.538152" elapsed="0.002048"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.542186" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.540351" elapsed="0.001890"/>
</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="PASS" start="2026-04-26T00:08:41.542392" elapsed="0.000312"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.543229" level="INFO">${rate} = 4981.066666666667</msg>
<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="PASS" start="2026-04-26T00:08:41.542856" elapsed="0.000428"/>
</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="PASS" start="2026-04-26T00:08:41.543434" elapsed="0.000324"/>
</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="PASS" start="2026-04-26T00:08:41.543905" elapsed="0.000339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.544741" level="INFO">${sum_local_number} = 5989201</msg>
<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="PASS" start="2026-04-26T00:08:41.544395" elapsed="0.000372"/>
</kw>
<var name="${index}">4</var>
<status status="PASS" start="2026-04-26T00:08:41.346631" elapsed="0.198171"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.549510" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.549219" elapsed="0.000318"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:41.549581" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.549728" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:41.548862" elapsed="0.000890"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.550300" level="INFO">&amp;{mapping} = { ID=working-pair-5 }</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-26T00:08:41.549906" 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-26T00:08:41.582709" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.582341" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.583548" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:41.583231" elapsed="0.000381">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.583705" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.582891" elapsed="0.000843"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.584296" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.583891" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.584607" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.584732" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:41.584476" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.585213" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.584943" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.586410" level="INFO">mapping: {'ID': 'working-pair-5'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.585924" elapsed="0.000532"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.587036" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.586608" elapsed="0.000454"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.588124" level="INFO">${value} = working-pair-5</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:41.587455" elapsed="0.000711"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:41.589800" level="INFO">${encoded} = working-pair-5</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-26T00:08:41.589429" elapsed="0.000407"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:41.589910" elapsed="0.000097"/>
</return>
<msg time="2026-04-26T00:08:41.590274" level="INFO">${encoded_value} = working-pair-5</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-26T00:08:41.588609" elapsed="0.001706"/>
</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-26T00:08:41.590534" elapsed="0.000534"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-5</var>
<status status="PASS" start="2026-04-26T00:08:41.587273" elapsed="0.003898"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.587110" elapsed="0.004098"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.591251" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:41.591439" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:41.585609" elapsed="0.005855"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.585325" elapsed="0.006171"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.591665" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.591521" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.585306" elapsed="0.006435"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.592327" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.591878" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.592402" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.581722" elapsed="0.010802"/>
</kw>
<msg time="2026-04-26T00:08:41.592574" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.569530" elapsed="0.023092"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.604854" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.616650" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.628456" 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-26T00:08:41.628678" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.628847" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.629217" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.629079" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.629064" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.629430" 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-26T00:08:41.629592" 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-26T00:08:41.629752" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.629035" elapsed="0.000769"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.628920" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.629984" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.630060" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.630169" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.565458" elapsed="0.064736"/>
</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-26T00:08:41.653803" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.653435" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.654608" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.654327" elapsed="0.000345">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.654763" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.654001" elapsed="0.000786"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.655343" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.654942" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.655673" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.655795" 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-26T00:08:41.655539" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.656234" 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-26T00:08:41.655992" elapsed="0.000288"/>
</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-26T00:08:41.656625" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.656344" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.657154" level="INFO">${mapping_to_use} = {'ID': 'working-pair-5'}</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-26T00:08:41.656846" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.656708" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.656326" elapsed="0.000910"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.657888" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:41.657374" elapsed="0.000576"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.658017" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.652820" elapsed="0.005324"/>
</kw>
<msg time="2026-04-26T00:08:41.658196" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.640777" elapsed="0.017467"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.670227" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.682027" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.693800" 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-26T00:08:41.694001" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.694171" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.694522" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.694384" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.694370" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.694735" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.694897" 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-26T00:08:41.695075" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.694342" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.694244" elapsed="0.000912"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.695294" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.695368" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.695481" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:41.639935" elapsed="0.055590"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.696793" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.696549" elapsed="0.000308">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.696948" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.696221" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.697305" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.697060" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.697825" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.697540" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.697386" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.697041" elapsed="0.000866"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.700218" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:41.698067" elapsed="0.002177"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:41.700295" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.700448" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:41.695885" elapsed="0.004587"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.702033" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.701706" elapsed="0.000378"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.702467" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&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-26T00:08:41.702232" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.702897" 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-26T00:08:41.702659" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.703345" 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-26T00:08:41.703109" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:41.704197" 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-26T00:08:41.704010" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:41.704540" 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-26T00:08:41.704370" elapsed="0.000195"/>
</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-26T00:08:41.704707" elapsed="0.000194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.705307" 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-26T00:08:41.705064" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:41.705391" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.705543" 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-26T00:08:41.703601" elapsed="0.001967"/>
</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-26T00:08:41.712634" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-5&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.712861" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499842&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499842&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.712989" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:41.708697" elapsed="0.004320"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.705638" elapsed="0.007424"/>
</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-26T00:08:41.713236" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.713088" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.705620" elapsed="0.007740"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.716950" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499842&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499842&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.714376" elapsed="0.002667"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.714159" elapsed="0.002933"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.714141" elapsed="0.002986"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.720710" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.717502" elapsed="0.003273"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.717203" elapsed="0.003619"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.717180" elapsed="0.003677"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.721614" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.721094" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.722093" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.721749" elapsed="0.000425"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.722838" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.722423" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.722208" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.721724" elapsed="0.001230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.723736" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.723192" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.724176" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.723870" elapsed="0.000364"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.724707" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.724414" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.724258" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.723845" elapsed="0.000944"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.724933" elapsed="0.000355"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:41.725717" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.725447" elapsed="0.000296"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.725891" elapsed="0.002317"/>
</kw>
<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="PASS" start="2026-04-26T00:08:41.713703" elapsed="0.014568"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:41.728447" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:08:41.728341" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.728323" elapsed="0.000208"/>
</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-26T00:08:41.728671" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.728739" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.730953" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499842&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499842&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.700783" elapsed="0.030215"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.731067" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.731218" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499842&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499842&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.554801" elapsed="0.176479"/>
</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-26T00:08:41.731646" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.731387" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.731368" elapsed="0.000378"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.731779" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:41.731927" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1499842&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1499842&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:41.550571" elapsed="0.181385"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:41.732446" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0ab78450&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:41.732132" elapsed="0.000341"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.732904" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.732623" elapsed="0.000307"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.733378" level="INFO">${id_not} = 1499842</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.733102" elapsed="0.000301"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.733825" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.733552" elapsed="0.000299"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.734290" level="INFO">${local_number} = 1499842</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.734014" elapsed="0.000301"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:41.734362" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:41.734615" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:41.734659" level="INFO">${id_not} = 1499842</msg>
<msg time="2026-04-26T00:08:41.734699" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:41.734739" level="INFO">${local_number} = 1499842</msg>
<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="PASS" start="2026-04-26T00:08:41.548412" elapsed="0.186349"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.736952" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.734918" elapsed="0.002105"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.739023" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.737175" elapsed="0.001906"/>
</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="PASS" start="2026-04-26T00:08:41.739233" elapsed="0.000313"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.740106" level="INFO">${rate} = 4999.473333333333</msg>
<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="PASS" start="2026-04-26T00:08:41.739731" elapsed="0.000401"/>
</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="PASS" start="2026-04-26T00:08:41.740280" elapsed="0.000324"/>
</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="PASS" start="2026-04-26T00:08:41.740753" elapsed="0.000339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.741694" level="INFO">${sum_local_number} = 7489043</msg>
<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="PASS" start="2026-04-26T00:08:41.741243" elapsed="0.000477"/>
</kw>
<var name="${index}">5</var>
<status status="PASS" start="2026-04-26T00:08:41.544924" elapsed="0.196831"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.746527" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.746232" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:41.746599" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.746745" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:41.745873" elapsed="0.000934"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.747359" level="INFO">&amp;{mapping} = { ID=working-pair-6 }</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-26T00:08:41.746983" elapsed="0.000403"/>
</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-26T00:08:41.780296" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.779896" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.781126" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:41.780811" elapsed="0.000380">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.781284" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.780483" elapsed="0.000825"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.781844" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.781467" elapsed="0.000404"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.782177" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.782301" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:41.782043" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.782718" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.782477" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.784219" level="INFO">mapping: {'ID': 'working-pair-6'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.783439" elapsed="0.000827"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.784831" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.784422" elapsed="0.000435"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.785908" level="INFO">${value} = working-pair-6</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:41.785248" elapsed="0.000701"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:41.787584" level="INFO">${encoded} = working-pair-6</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-26T00:08:41.787212" elapsed="0.000408"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:41.787720" elapsed="0.000076"/>
</return>
<msg time="2026-04-26T00:08:41.788081" level="INFO">${encoded_value} = working-pair-6</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-26T00:08:41.786411" elapsed="0.001712"/>
</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-26T00:08:41.788344" elapsed="0.000508"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-6</var>
<status status="PASS" start="2026-04-26T00:08:41.785088" elapsed="0.003863"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.784904" elapsed="0.004109"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.789056" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.789212" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:41.783126" elapsed="0.006111"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.782828" elapsed="0.006440"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.789436" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.789293" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.782809" elapsed="0.006703"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.790094" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.789650" elapsed="0.000471"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.790169" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.779247" elapsed="0.011045"/>
</kw>
<msg time="2026-04-26T00:08:41.790392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.766876" elapsed="0.023566"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.802775" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.814824" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.826771" 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-26T00:08:41.826974" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.827145" 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-26T00:08:41.827498" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.827360" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.827345" elapsed="0.000231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.827711" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.827906" 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-26T00:08:41.828085" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.827317" elapsed="0.000821"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.827216" elapsed="0.000948"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.828303" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.828377" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:41.828488" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.762718" elapsed="0.065795"/>
</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-26T00:08:41.852368" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.851998" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.853232" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:41.852917" elapsed="0.000380">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.853389" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.852589" elapsed="0.000825"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.853954" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.853572" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.854295" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.854426" 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-26T00:08:41.854162" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.854843" 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-26T00:08:41.854603" elapsed="0.000286"/>
</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-26T00:08:41.855258" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.854955" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.855772" level="INFO">${mapping_to_use} = {'ID': 'working-pair-6'}</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-26T00:08:41.855480" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.855341" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.854936" elapsed="0.000935"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.856547" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:41.856027" elapsed="0.000548"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.856624" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.851354" elapsed="0.005395"/>
</kw>
<msg time="2026-04-26T00:08:41.856801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.839225" elapsed="0.017624"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.869053" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.881047" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.893076" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.893304" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.893474" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.893829" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.893691" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:41.893676" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.894071" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.894237" 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-26T00:08:41.894395" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:41.893648" elapsed="0.000799"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.893546" elapsed="0.000926"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.894609" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.894682" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:41.894799" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:41.838377" elapsed="0.056450"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.896079" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.895818" elapsed="0.000325">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.896235" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.895487" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.896570" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.896330" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.897113" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.896804" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.896649" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.896310" elapsed="0.000885"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.899453" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:41.897339" elapsed="0.002140"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:41.899529" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.899681" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:41.895168" elapsed="0.004538"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.901253" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.901007" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.901680" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&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-26T00:08:41.901445" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.902130" 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-26T00:08:41.901870" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.902555" 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-26T00:08:41.902317" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:41.903432" 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-26T00:08:41.903246" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:41.903776" 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-26T00:08:41.903606" elapsed="0.000195"/>
</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-26T00:08:41.903976" elapsed="0.000200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.904569" 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-26T00:08:41.904326" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:41.904655" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.904809" 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-26T00:08:41.902829" elapsed="0.002005"/>
</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-26T00:08:41.911093" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-6&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.911212" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:41.911309" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:41.907100" elapsed="0.004234"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.904904" elapsed="0.006476"/>
</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-26T00:08:41.911553" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.911406" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.904886" elapsed="0.006753"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.915001" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.912679" elapsed="0.002373"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.912460" elapsed="0.002627"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.912442" elapsed="0.002670"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.917916" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.915379" elapsed="0.002621"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.915166" elapsed="0.002882"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.915149" elapsed="0.002934"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.918812" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.918301" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.919287" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.918945" elapsed="0.000423"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.920069" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.919615" elapsed="0.000491"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.919401" elapsed="0.000754"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.918920" elapsed="0.001264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.920891" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.920397" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.921366" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.921046" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.922119" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.921690" elapsed="0.000464"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.921478" elapsed="0.000770"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.921020" elapsed="0.001263"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.922489" elapsed="0.000499"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:41.923595" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:41.923217" elapsed="0.000415"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.923837" elapsed="0.002675"/>
</kw>
<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="PASS" start="2026-04-26T00:08:41.912029" elapsed="0.014546"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:41.926752" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:41.926646" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.926628" elapsed="0.000209"/>
</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-26T00:08:41.926993" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:41.927062" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:41.929282" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.900070" elapsed="0.029242"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.929382" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:41.929534" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.751932" elapsed="0.177630"/>
</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-26T00:08:41.929891" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.929663" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.929646" elapsed="0.000352"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.930041" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:41.930192" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:41.747665" elapsed="0.182556"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:41.930689" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a8b13a0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:41.930376" elapsed="0.000340"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.931165" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.930865" elapsed="0.000325"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.931614" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.931339" elapsed="0.000300"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.932115" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.931787" elapsed="0.000354"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:41.932564" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:41.932290" elapsed="0.000299"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:41.932635" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:41.932928" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:41.932988" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-26T00:08:41.933030" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:41.933070" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-26T00:08:41.745420" elapsed="0.187672"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.935230" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.933255" elapsed="0.002032"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.937279" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:41.935439" elapsed="0.001896"/>
</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="PASS" start="2026-04-26T00:08:41.937486" elapsed="0.000314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.938332" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-26T00:08:41.937953" elapsed="0.000405"/>
</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="PASS" start="2026-04-26T00:08:41.938507" elapsed="0.000323"/>
</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="PASS" start="2026-04-26T00:08:41.938994" elapsed="0.000323"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.939815" level="INFO">${sum_local_number} = 8989044</msg>
<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="PASS" start="2026-04-26T00:08:41.939468" elapsed="0.000373"/>
</kw>
<var name="${index}">6</var>
<status status="PASS" start="2026-04-26T00:08:41.741878" elapsed="0.197998"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.944636" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.944343" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:41.944707" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.944852" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:41.944006" elapsed="0.000870"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.945419" level="INFO">&amp;{mapping} = { ID=working-pair-7 }</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-26T00:08:41.945046" elapsed="0.000399"/>
</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-26T00:08:41.977841" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:41.977468" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.978646" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:41.978364" elapsed="0.000346">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:41.978804" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:41.978039" elapsed="0.000789"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.979391" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:41.979009" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:41.979704" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:41.979825" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:41.979572" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.980287" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.980042" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.981463" level="INFO">mapping: {'ID': 'working-pair-7'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:41.981004" elapsed="0.000504"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.982128" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:41.981661" elapsed="0.000493"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.983190" level="INFO">${value} = working-pair-7</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:41.982528" elapsed="0.000702"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:41.984865" level="INFO">${encoded} = working-pair-7</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-26T00:08:41.984495" elapsed="0.000405"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:41.984992" elapsed="0.000076"/>
</return>
<msg time="2026-04-26T00:08:41.985328" level="INFO">${encoded_value} = working-pair-7</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-26T00:08:41.983669" elapsed="0.001699"/>
</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-26T00:08:41.985587" elapsed="0.000521"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-7</var>
<status status="PASS" start="2026-04-26T00:08:41.982368" elapsed="0.003842"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.982203" elapsed="0.004044"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:41.986290" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:41.986446" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:41.980679" elapsed="0.005791"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:41.980397" elapsed="0.006105"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.986668" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:41.986526" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:41.980378" elapsed="0.006366"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:41.987320" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.986878" elapsed="0.000469"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:41.987395" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:41.976844" elapsed="0.010674"/>
</kw>
<msg time="2026-04-26T00:08:41.987569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:41.964675" elapsed="0.022942"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:41.999810" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.011710" elapsed="0.000026"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.023600" 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-26T00:08:42.023788" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.023969" 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-26T00:08:42.024390" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.024248" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.024232" 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-26T00:08:42.024605" 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-26T00:08:42.024767" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.024927" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.024203" elapsed="0.000792"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.024080" elapsed="0.000942"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.025162" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.025236" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.025346" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:41.960584" elapsed="0.064787"/>
</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-26T00:08:42.048924" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.048555" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.049735" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.049450" elapsed="0.000349">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.049891" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.049124" elapsed="0.000791"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.050478" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.050095" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.050787" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.050910" 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-26T00:08:42.050656" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.051343" 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-26T00:08:42.051104" elapsed="0.000285"/>
</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-26T00:08:42.051736" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.051455" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.052303" level="INFO">${mapping_to_use} = {'ID': 'working-pair-7'}</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-26T00:08:42.051956" elapsed="0.000373"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.051818" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.051436" elapsed="0.000949"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.053068" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:42.052524" elapsed="0.000572"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.053146" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.047931" elapsed="0.005339"/>
</kw>
<msg time="2026-04-26T00:08:42.053368" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.035901" elapsed="0.017516"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.065426" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.077215" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.088945" elapsed="0.000039"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.089144" 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-26T00:08:42.089310" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.089656" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.089519" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.089505" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.089865" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.090038" 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-26T00:08:42.090202" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.089478" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.089381" elapsed="0.000898"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.090415" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.090488" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.090602" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:42.035070" elapsed="0.055559"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.091831" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.091602" elapsed="0.000326">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.092038" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.091275" elapsed="0.000787"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.092400" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.092132" elapsed="0.000324"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.092927" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.092638" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.092480" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.092114" elapsed="0.000910"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.095282" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:42.093169" elapsed="0.002139"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:42.095357" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.095508" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:42.090946" elapsed="0.004586"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.097041" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.096782" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.097467" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&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-26T00:08:42.097234" elapsed="0.000277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.097892" 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-26T00:08:42.097653" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.098331" 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-26T00:08:42.098095" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:42.099156" 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-26T00:08:42.098950" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:42.099494" 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-26T00:08:42.099327" elapsed="0.000192"/>
</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-26T00:08:42.099661" elapsed="0.000192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.100299" 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-26T00:08:42.100024" elapsed="0.000322"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:42.100388" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.100541" 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-26T00:08:42.098562" elapsed="0.002003"/>
</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-26T00:08:42.106798" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-7&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.106911" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.107025" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:42.102813" elapsed="0.004238"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.100633" elapsed="0.006463"/>
</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-26T00:08:42.107390" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.107126" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.100616" elapsed="0.006861"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.111554" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.108570" elapsed="0.003053"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.108355" elapsed="0.003316"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.108336" elapsed="0.003370"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.115366" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.112154" elapsed="0.003276"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.111782" elapsed="0.003695"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.111759" elapsed="0.003753"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.116324" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.115730" elapsed="0.000635"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.116784" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.116466" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.117426" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.117128" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.116897" elapsed="0.000589"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.116441" elapsed="0.001067"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.118036" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.117660" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.118363" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.118136" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.118887" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.118595" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.118443" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.118119" elapsed="0.000865"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.119127" elapsed="0.000415"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:42.119993" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.119700" elapsed="0.000320"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.120168" elapsed="0.002322"/>
</kw>
<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="PASS" start="2026-04-26T00:08:42.107851" elapsed="0.014701"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:42.122728" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:42.122623" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.122605" elapsed="0.000209"/>
</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-26T00:08:42.122955" elapsed="0.000037"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.123039" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.125273" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.095839" elapsed="0.029464"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.125373" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.125525" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:41.949912" elapsed="0.175641"/>
</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-26T00:08:42.125920" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.125689" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.125671" elapsed="0.000361"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.126065" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:42.126216" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:41.945689" elapsed="0.180555"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:42.126719" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a8b2700&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:42.126403" elapsed="0.000343"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.127197" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.126897" elapsed="0.000326"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.127650" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.127375" elapsed="0.000301"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.128121" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.127826" elapsed="0.000321"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.128588" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.128312" elapsed="0.000301"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:42.128659" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.128913" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:42.128972" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-26T00:08:42.129016" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:42.129057" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-26T00:08:41.943525" elapsed="0.185555"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.131297" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.129243" elapsed="0.002111"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.133370" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.131506" elapsed="0.001919"/>
</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="PASS" start="2026-04-26T00:08:42.133577" elapsed="0.000315"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.134417" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-26T00:08:42.134060" elapsed="0.000384"/>
</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="PASS" start="2026-04-26T00:08:42.134591" elapsed="0.000321"/>
</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="PASS" start="2026-04-26T00:08:42.135076" elapsed="0.000322"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.135896" level="INFO">${sum_local_number} = 10489045</msg>
<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="PASS" start="2026-04-26T00:08:42.135548" elapsed="0.000374"/>
</kw>
<var name="${index}">7</var>
<status status="PASS" start="2026-04-26T00:08:41.940044" elapsed="0.195928"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.140725" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.140428" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:42.140796" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.140943" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:42.140050" elapsed="0.000933"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.141513" level="INFO">&amp;{mapping} = { ID=working-pair-8 }</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-26T00:08:42.141142" elapsed="0.000398"/>
</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-26T00:08:42.174912" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.174538" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.175736" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:42.175443" elapsed="0.000358">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.175894" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.175117" elapsed="0.000801"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.176496" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.176100" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.176813" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.176940" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:42.176679" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.177375" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.177135" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.178556" level="INFO">mapping: {'ID': 'working-pair-8'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.178098" elapsed="0.000504"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.179184" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.178755" elapsed="0.000455"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.180247" level="INFO">${value} = working-pair-8</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:42.179578" elapsed="0.000710"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:42.181972" level="INFO">${encoded} = working-pair-8</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-26T00:08:42.181584" elapsed="0.000427"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:42.182089" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:42.182424" level="INFO">${encoded_value} = working-pair-8</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-26T00:08:42.180763" elapsed="0.001701"/>
</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-26T00:08:42.182682" elapsed="0.000528"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-8</var>
<status status="PASS" start="2026-04-26T00:08:42.179420" elapsed="0.003890"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.179257" elapsed="0.004089"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.183388" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.183544" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:42.177768" elapsed="0.005800"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.177485" elapsed="0.006115"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.183767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.183625" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.177466" elapsed="0.006376"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.184441" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.183992" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.184516" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.173917" elapsed="0.010720"/>
</kw>
<msg time="2026-04-26T00:08:42.184722" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.160812" elapsed="0.023961"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.196992" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.208871" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.220702" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.220903" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.221090" 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-26T00:08:42.221445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.221307" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.221292" elapsed="0.000233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.221661" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.221825" 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-26T00:08:42.222001" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.221264" elapsed="0.000791"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.221166" elapsed="0.000915"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.222225" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.222300" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.222409" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.156723" elapsed="0.065711"/>
</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-26T00:08:42.246452" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.246080" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.247254" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.246971" elapsed="0.000347">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.247447" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.246637" elapsed="0.000835"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.248047" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.247632" elapsed="0.000443"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.248366" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.248504" 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-26T00:08:42.248231" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.248926" 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-26T00:08:42.248684" elapsed="0.000306"/>
</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-26T00:08:42.249341" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.249058" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.249853" level="INFO">${mapping_to_use} = {'ID': 'working-pair-8'}</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-26T00:08:42.249564" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.249425" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.249039" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.250607" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:42.250090" elapsed="0.000545"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.250684" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.245455" elapsed="0.005352"/>
</kw>
<msg time="2026-04-26T00:08:42.250860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.233307" elapsed="0.017601"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.263013" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.274881" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.286760" 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-26T00:08:42.286949" elapsed="0.000037"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.287139" elapsed="0.000063"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.287548" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.287407" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.287391" 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-26T00:08:42.287765" 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-26T00:08:42.287930" 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-26T00:08:42.288109" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.287363" elapsed="0.000800"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.287262" elapsed="0.000927"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.288328" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.288402" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.288518" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:42.232344" elapsed="0.056202"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.289796" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.289564" elapsed="0.000295">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.289951" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.289225" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.290302" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.290062" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.290828" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.290540" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.290383" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.290044" elapsed="0.000865"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.293206" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:42.291071" elapsed="0.002161"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:42.293284" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:42.293438" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:42.288889" elapsed="0.004575"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.294973" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.294712" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.295409" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&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-26T00:08:42.295170" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.295845" 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-26T00:08:42.295601" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.296291" 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-26T00:08:42.296050" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:42.297163" 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-26T00:08:42.296945" elapsed="0.000244"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:42.297553" 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-26T00:08:42.297378" elapsed="0.000201"/>
</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-26T00:08:42.297724" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.298348" 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-26T00:08:42.298098" elapsed="0.000295"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:42.298435" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:42.298590" 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-26T00:08:42.296528" elapsed="0.002087"/>
</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-26T00:08:42.304808" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-8&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.305072" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495356&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495356&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.305183" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:42.300908" elapsed="0.004301"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.298686" elapsed="0.006569"/>
</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-26T00:08:42.305429" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.305281" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.298668" elapsed="0.006849"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.308835" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495356&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495356&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.306526" elapsed="0.002359"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.306313" elapsed="0.002606"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.306295" elapsed="0.002649"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.312501" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.309315" elapsed="0.003249"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.309015" elapsed="0.003611"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.308998" elapsed="0.003664"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.313420" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.312878" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.313869" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.313553" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.314631" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.314219" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.314003" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.313528" elapsed="0.001218"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.315477" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.314975" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.315923" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.315608" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.316731" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.316273" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.316058" elapsed="0.000759"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.315583" elapsed="0.001264"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.317065" elapsed="0.000409"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:42.317948" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.317672" elapsed="0.000318"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.318140" elapsed="0.002290"/>
</kw>
<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="PASS" start="2026-04-26T00:08:42.305861" elapsed="0.014632"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:42.320691" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:08:42.320565" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.320547" elapsed="0.000229"/>
</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-26T00:08:42.320917" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.321002" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.323226" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495356&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495356&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.293776" elapsed="0.029480"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.323325" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.323476" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495356&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495356&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.146056" elapsed="0.177447"/>
</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-26T00:08:42.323835" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.323605" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.323587" elapsed="0.000340"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.323974" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.324133" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1495356&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1495356&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:42.141823" elapsed="0.182339"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:42.324657" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a8b2e30&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:42.324317" elapsed="0.000369"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.325142" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.324842" elapsed="0.000326"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.325591" level="INFO">${id_not} = 1495356</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.325318" elapsed="0.000298"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.326053" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.325764" elapsed="0.000315"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.326506" level="INFO">${local_number} = 1495356</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.326233" elapsed="0.000298"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:42.326576" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:42.326826" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:42.326869" level="INFO">${id_not} = 1495356</msg>
<msg time="2026-04-26T00:08:42.326909" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:42.327012" level="INFO">${local_number} = 1495356</msg>
<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="PASS" start="2026-04-26T00:08:42.139581" elapsed="0.187457"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.329205" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.327200" elapsed="0.002063"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.331249" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.329414" elapsed="0.001890"/>
</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="PASS" start="2026-04-26T00:08:42.331454" elapsed="0.000315"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.332449" level="INFO">${rate} = 4984.52</msg>
<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="PASS" start="2026-04-26T00:08:42.331968" elapsed="0.000508"/>
</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="PASS" start="2026-04-26T00:08:42.332627" elapsed="0.000377"/>
</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="PASS" start="2026-04-26T00:08:42.333155" elapsed="0.000325"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.333999" level="INFO">${sum_local_number} = 11984401</msg>
<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="PASS" start="2026-04-26T00:08:42.333631" elapsed="0.000395"/>
</kw>
<var name="${index}">8</var>
<status status="PASS" start="2026-04-26T00:08:42.136098" elapsed="0.197965"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.338811" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.338512" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:42.338883" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.339049" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:42.338172" elapsed="0.000903"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.339610" level="INFO">&amp;{mapping} = { ID=working-pair-9 }</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-26T00:08:42.339236" elapsed="0.000401"/>
</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-26T00:08:42.372120" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.371731" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.372951" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:42.372631" elapsed="0.000410">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.373135" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.372306" elapsed="0.000853"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.373700" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.373317" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.374038" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.374164" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:42.373879" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.374577" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.374337" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.375758" level="INFO">mapping: {'ID': 'working-pair-9'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.375299" elapsed="0.000504"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.376376" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.375970" elapsed="0.000432"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.377516" level="INFO">${value} = working-pair-9</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:42.376834" elapsed="0.000723"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:42.379351" level="INFO">${encoded} = working-pair-9</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-26T00:08:42.378972" elapsed="0.000415"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:42.379463" elapsed="0.000075"/>
</return>
<msg time="2026-04-26T00:08:42.379797" level="INFO">${encoded_value} = working-pair-9</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-26T00:08:42.378026" elapsed="0.001810"/>
</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-26T00:08:42.380070" elapsed="0.000509"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-9</var>
<status status="PASS" start="2026-04-26T00:08:42.376652" elapsed="0.004025"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.376484" elapsed="0.004260"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.380789" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.380946" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:42.374984" elapsed="0.006002"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.374687" elapsed="0.006331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.381188" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.381044" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.374668" elapsed="0.006595"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.381825" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.381399" elapsed="0.000453"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.381899" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.371126" elapsed="0.010912"/>
</kw>
<msg time="2026-04-26T00:08:42.382090" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.358904" elapsed="0.023234"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.394317" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.406124" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.417884" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.418088" 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-26T00:08:42.418263" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.418617" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.418478" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.418463" elapsed="0.000272"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.418873" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.419053" 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-26T00:08:42.419216" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.418435" elapsed="0.000833"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.418336" elapsed="0.000958"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.419433" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.419509" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.419619" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.354727" elapsed="0.064918"/>
</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-26T00:08:42.443412" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.443032" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.444210" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.443913" elapsed="0.000360">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.444363" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.443594" elapsed="0.000793"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.444955" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.444542" elapsed="0.000463"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.445290" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.445413" 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-26T00:08:42.445158" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.445826" 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-26T00:08:42.445587" elapsed="0.000285"/>
</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-26T00:08:42.446242" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.445936" elapsed="0.000364"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.446751" level="INFO">${mapping_to_use} = {'ID': 'working-pair-9'}</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-26T00:08:42.446463" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.446325" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.445918" elapsed="0.000915"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.447504" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:42.446986" elapsed="0.000546"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.447580" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.442404" elapsed="0.005299"/>
</kw>
<msg time="2026-04-26T00:08:42.447790" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.430238" elapsed="0.017602"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.459858" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.472478" elapsed="0.000058"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.484355" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.484558" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.484730" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.485148" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.485007" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.484990" 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-26T00:08:42.485362" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.485523" 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-26T00:08:42.485682" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.484943" elapsed="0.000790"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.484807" elapsed="0.000952"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.485902" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.485992" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.486123" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:42.429389" elapsed="0.056762"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.487431" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.487160" elapsed="0.000339">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.487591" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.486793" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.488014" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.487750" elapsed="0.000323"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.488555" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.488260" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.488097" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.487730" elapsed="0.000908"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.490918" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:42.488783" elapsed="0.002161"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:42.491009" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.491162" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:42.486478" elapsed="0.004708"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.492664" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.492415" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.493143" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&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-26T00:08:42.492855" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.493572" 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-26T00:08:42.493334" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.494007" 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-26T00:08:42.493757" elapsed="0.000293"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:42.494821" 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-26T00:08:42.494636" elapsed="0.000211"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:42.495177" 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-26T00:08:42.495007" elapsed="0.000195"/>
</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-26T00:08:42.495342" elapsed="0.000192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.495927" 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-26T00:08:42.495685" elapsed="0.000301"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:42.496029" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.496182" 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-26T00:08:42.494246" elapsed="0.001960"/>
</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-26T00:08:42.502305" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '109', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-9&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.502549" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1489249&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1489249&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.502646" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:42.498455" elapsed="0.004216"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.496276" elapsed="0.006440"/>
</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-26T00:08:42.502891" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.502742" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.496258" elapsed="0.006743"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.506304" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1489249&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1489249&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.503993" elapsed="0.002361"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.503764" elapsed="0.002657"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.503746" elapsed="0.002703"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.509006" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.506719" elapsed="0.002335"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.506505" elapsed="0.002583"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.506488" elapsed="0.002625"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.509634" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.509269" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.509971" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.509730" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.510506" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.510211" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.510054" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.509712" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.511111" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.510738" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.511429" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.511205" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.511949" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.511659" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.511509" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.511188" elapsed="0.000857"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.512186" elapsed="0.000334"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:42.512971" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.512675" elapsed="0.000324"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.513146" elapsed="0.002261"/>
</kw>
<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="PASS" start="2026-04-26T00:08:42.503338" elapsed="0.012131"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:42.515644" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:08:42.515540" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.515522" elapsed="0.000204"/>
</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-26T00:08:42.515866" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.515932" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.518159" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1489249&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1489249&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.491493" elapsed="0.026695"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.518257" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.518407" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1489249&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1489249&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.344113" elapsed="0.174321"/>
</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-26T00:08:42.518762" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.518534" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.518517" elapsed="0.000372"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.518922" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:42.519089" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1489249&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1489249&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:42.339883" elapsed="0.179235"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:42.519602" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a8fc360&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:42.519275" elapsed="0.000354"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.520075" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.519778" elapsed="0.000323"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.520531" level="INFO">${id_not} = 1489249</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.520255" elapsed="0.000302"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.521015" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.520706" elapsed="0.000335"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.521462" level="INFO">${local_number} = 1489249</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.521189" elapsed="0.000298"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:42.521533" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.521786" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:42.521829" level="INFO">${id_not} = 1489249</msg>
<msg time="2026-04-26T00:08:42.521868" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:42.521909" level="INFO">${local_number} = 1489249</msg>
<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="PASS" start="2026-04-26T00:08:42.337701" elapsed="0.184230"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.524070" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.522115" elapsed="0.002012"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.526119" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.524277" elapsed="0.001896"/>
</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="PASS" start="2026-04-26T00:08:42.526323" elapsed="0.000311"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.527158" level="INFO">${rate} = 4964.163333333333</msg>
<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="PASS" start="2026-04-26T00:08:42.526786" elapsed="0.000398"/>
</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="PASS" start="2026-04-26T00:08:42.527332" elapsed="0.000321"/>
</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="PASS" start="2026-04-26T00:08:42.527800" elapsed="0.000336"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.528634" level="INFO">${sum_local_number} = 13473650</msg>
<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="PASS" start="2026-04-26T00:08:42.528286" elapsed="0.000374"/>
</kw>
<var name="${index}">9</var>
<status status="PASS" start="2026-04-26T00:08:42.334188" elapsed="0.194508"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.533432" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.533138" elapsed="0.000320"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:42.533502" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.533647" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:42.532758" elapsed="0.000913"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.534211" level="INFO">&amp;{mapping} = { ID=working-pair-10 }</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-26T00:08:42.533826" elapsed="0.000412"/>
</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-26T00:08:42.566635" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.566263" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.567626" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:42.567204" elapsed="0.000486">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.567783" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.566857" elapsed="0.000950"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.568367" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.567987" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.568680" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.568811" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:42.568547" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.569270" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.569006" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.570460" level="INFO">mapping: {'ID': 'working-pair-10'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.569996" elapsed="0.000510"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.571079" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.570659" elapsed="0.000446"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.572140" level="INFO">${value} = working-pair-10</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:42.571472" elapsed="0.000708"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:42.573882" level="INFO">${encoded} = working-pair-10</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-26T00:08:42.573512" elapsed="0.000405"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:42.574012" elapsed="0.000074"/>
</return>
<msg time="2026-04-26T00:08:42.574351" level="INFO">${encoded_value} = working-pair-10</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-26T00:08:42.572667" elapsed="0.001723"/>
</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-26T00:08:42.574607" elapsed="0.000532"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-10</var>
<status status="PASS" start="2026-04-26T00:08:42.571314" elapsed="0.003925"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.571152" elapsed="0.004124"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.575319" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.575476" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:42.569669" elapsed="0.005831"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.569380" elapsed="0.006152"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.575698" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.575556" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.569361" elapsed="0.006412"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.576355" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.575914" elapsed="0.000467"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.576429" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.565640" elapsed="0.010911"/>
</kw>
<msg time="2026-04-26T00:08:42.576601" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.553507" elapsed="0.023142"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.588813" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.601591" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.613394" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.613585" 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-26T00:08:42.613755" 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-26T00:08:42.614126" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.613986" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.613969" 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-26T00:08:42.614339" 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-26T00:08:42.614501" 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-26T00:08:42.614661" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.613928" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.613829" elapsed="0.000910"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.614878" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.614952" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:42.615078" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.549451" elapsed="0.065652"/>
</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-26T00:08:42.638644" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.638272" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.639486" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.639187" elapsed="0.000362">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.639640" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.638827" elapsed="0.000836"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.640259" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.639853" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.640573" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.640698" 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-26T00:08:42.640440" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.641156" 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-26T00:08:42.640874" elapsed="0.000340"/>
</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-26T00:08:42.641574" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.641292" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.642099" level="INFO">${mapping_to_use} = {'ID': 'working-pair-10'}</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-26T00:08:42.641794" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.641657" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.641273" elapsed="0.000913"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.642841" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:42.642325" elapsed="0.000544"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.642917" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.637654" elapsed="0.005404"/>
</kw>
<msg time="2026-04-26T00:08:42.643110" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.625633" elapsed="0.017524"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.656071" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.667918" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.679790" 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-26T00:08:42.679993" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.680168" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.680522" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.680382" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.680368" elapsed="0.000276"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.680787" 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-26T00:08:42.680950" elapsed="0.000036"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.681131" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.680340" elapsed="0.000844"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.680241" elapsed="0.000983"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.681366" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.681442" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:42.681559" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:42.624775" elapsed="0.056812"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.682815" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.682583" elapsed="0.000297">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.682986" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.682247" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.683329" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.683083" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.683864" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.683568" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.683409" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.683064" elapsed="0.000885"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.686262" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:42.684119" elapsed="0.002170"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:42.686342" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.686495" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:42.681913" elapsed="0.004607"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.688071" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.687809" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.688508" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&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-26T00:08:42.688266" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.688946" 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-26T00:08:42.688703" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.689416" 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-26T00:08:42.689154" elapsed="0.000305"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:42.690292" 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-26T00:08:42.690067" elapsed="0.000251"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:42.690637" 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-26T00:08:42.690465" elapsed="0.000197"/>
</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-26T00:08:42.690805" elapsed="0.000213"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.691466" 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-26T00:08:42.691207" elapsed="0.000305"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:42.691555" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.691709" 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-26T00:08:42.689652" elapsed="0.002082"/>
</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-26T00:08:42.697996" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-10&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.698233" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1480446&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1480446&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.698341" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:42.694031" elapsed="0.004337"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.691806" elapsed="0.006608"/>
</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-26T00:08:42.698590" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.698441" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.691787" elapsed="0.006893"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.702088" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1480446&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1480446&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.699727" elapsed="0.002435"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.699513" elapsed="0.002698"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.699495" elapsed="0.002752"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.705848" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.702622" elapsed="0.003289"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.702322" elapsed="0.003660"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.702300" elapsed="0.003720"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.706762" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.706245" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.707286" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.706897" elapsed="0.000471"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.708058" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.707619" elapsed="0.000476"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.707402" elapsed="0.000748"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.706872" elapsed="0.001308"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.708898" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.708396" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.709413" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.709054" elapsed="0.000443"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.710196" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.709743" elapsed="0.000486"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.709530" elapsed="0.000737"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.709029" elapsed="0.001259"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.710432" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:42.711215" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.710926" elapsed="0.000315"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.711429" elapsed="0.002299"/>
</kw>
<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="PASS" start="2026-04-26T00:08:42.699041" elapsed="0.014750"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:42.713987" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-26T00:08:42.713864" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.713845" elapsed="0.000230"/>
</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-26T00:08:42.714216" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.714284" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.716491" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1480446&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1480446&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.686832" elapsed="0.029689"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.716591" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.716743" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1480446&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1480446&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.538743" elapsed="0.178028"/>
</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-26T00:08:42.717119" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.716873" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.716855" elapsed="0.000357"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.717245" elapsed="0.000060"/>
</return>
<msg time="2026-04-26T00:08:42.717428" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1480446&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1480446&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:42.534481" elapsed="0.182976"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:42.717930" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a8fdad0&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:42.717612" elapsed="0.000345"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.718409" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.718124" elapsed="0.000311"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.718863" level="INFO">${id_not} = 1480446</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.718587" elapsed="0.000301"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.719331" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.719055" elapsed="0.000302"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.719786" level="INFO">${local_number} = 1480446</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.719505" elapsed="0.000306"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:42.719857" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:42.720128" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:42.720179" level="INFO">${id_not} = 1480446</msg>
<msg time="2026-04-26T00:08:42.720219" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:42.720259" level="INFO">${local_number} = 1480446</msg>
<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="PASS" start="2026-04-26T00:08:42.532305" elapsed="0.187976"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.722467" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.720439" elapsed="0.002140"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.724588" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.722731" elapsed="0.001913"/>
</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="PASS" start="2026-04-26T00:08:42.724797" elapsed="0.000332"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.725685" level="INFO">${rate} = 4934.82</msg>
<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="PASS" start="2026-04-26T00:08:42.725319" elapsed="0.000392"/>
</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="PASS" start="2026-04-26T00:08:42.725860" elapsed="0.000345"/>
</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="PASS" start="2026-04-26T00:08:42.726354" elapsed="0.000320"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.727191" level="INFO">${sum_local_number} = 14954096</msg>
<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="PASS" start="2026-04-26T00:08:42.726825" elapsed="0.000392"/>
</kw>
<var name="${index}">10</var>
<status status="PASS" start="2026-04-26T00:08:42.528819" elapsed="0.198434"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.732032" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.731719" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:42.732104" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.732251" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:42.731382" elapsed="0.000894"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.732804" level="INFO">&amp;{mapping} = { ID=working-pair-11 }</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-26T00:08:42.732431" elapsed="0.000400"/>
</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-26T00:08:42.765567" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.765154" elapsed="0.000442"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.766384" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:42.766093" elapsed="0.000356">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.766542" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.765753" elapsed="0.000814"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.767129" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.766724" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.767444" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.767570" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:42.767311" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.768001" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.767744" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.769204" level="INFO">mapping: {'ID': 'working-pair-11'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.768717" elapsed="0.000534"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.769840" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.769426" elapsed="0.000441"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.770969" level="INFO">${value} = working-pair-11</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:42.770292" elapsed="0.000722"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:42.772663" level="INFO">${encoded} = working-pair-11</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-26T00:08:42.772282" elapsed="0.000453"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:42.772817" elapsed="0.000077"/>
</return>
<msg time="2026-04-26T00:08:42.773180" level="INFO">${encoded_value} = working-pair-11</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-26T00:08:42.771461" elapsed="0.001760"/>
</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-26T00:08:42.773475" elapsed="0.000538"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-11</var>
<status status="PASS" start="2026-04-26T00:08:42.770104" elapsed="0.004013"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.769915" elapsed="0.004240"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.774198" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.774357" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:42.768404" elapsed="0.005978"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.768113" elapsed="0.006301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.774583" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.774439" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.768094" elapsed="0.006571"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.775395" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.774801" elapsed="0.000622"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.775470" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.764524" elapsed="0.011068"/>
</kw>
<msg time="2026-04-26T00:08:42.775645" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.752216" elapsed="0.023477"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.787982" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.799856" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.811746" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.811934" elapsed="0.000033"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.812117" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.812465" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.812328" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.812313" elapsed="0.000230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.812676" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.812876" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.813056" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.812287" elapsed="0.000826"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.812189" elapsed="0.000952"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.813280" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.813356" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.813501" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.748111" elapsed="0.065416"/>
</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-26T00:08:42.837208" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.836816" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.838059" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:42.837749" elapsed="0.000374">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.838215" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.837391" elapsed="0.000848"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.838772" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.838394" elapsed="0.000405"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.839102" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.839224" 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-26T00:08:42.838952" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.839646" 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-26T00:08:42.839406" elapsed="0.000285"/>
</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-26T00:08:42.840052" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.839756" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.840562" level="INFO">${mapping_to_use} = {'ID': 'working-pair-11'}</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-26T00:08:42.840274" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.840137" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.839737" elapsed="0.000905"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.841309" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:42.840778" elapsed="0.000560"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.841385" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.836214" elapsed="0.005310"/>
</kw>
<msg time="2026-04-26T00:08:42.841612" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.824156" elapsed="0.017506"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.853645" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.865572" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.877365" 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-26T00:08:42.877583" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.877753" 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-26T00:08:42.878115" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.877976" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:42.877948" elapsed="0.000246"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.878327" 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-26T00:08:42.878487" 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-26T00:08:42.878646" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:42.877921" elapsed="0.000777"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.877825" elapsed="0.000897"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.878859" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.878933" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.879065" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:42.823313" elapsed="0.055779"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.880315" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.880080" elapsed="0.000298">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.880469" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.879735" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.880838" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.880597" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.881388" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.881091" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.880920" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.880577" elapsed="0.000893"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.883761" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:42.881636" elapsed="0.002152"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:42.883838" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:08:42.884008" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:42.879419" elapsed="0.004615"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.885514" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.885270" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.885992" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&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-26T00:08:42.885740" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.886431" 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-26T00:08:42.886191" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.886854" 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-26T00:08:42.886618" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:42.887683" 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-26T00:08:42.887497" elapsed="0.000213"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:42.888040" 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-26T00:08:42.887854" elapsed="0.000212"/>
</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-26T00:08:42.888213" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.888794" 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-26T00:08:42.888553" elapsed="0.000284"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:42.888878" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:42.889046" 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-26T00:08:42.887105" elapsed="0.001966"/>
</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-26T00:08:42.895054" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-11&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.895288" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494401&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494401&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:42.895385" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:42.891352" elapsed="0.004059"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.889145" elapsed="0.006312"/>
</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-26T00:08:42.895630" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.895483" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.889127" elapsed="0.006590"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.899028" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494401&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494401&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.896710" elapsed="0.002369"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.896499" elapsed="0.002614"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.896482" elapsed="0.002689"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.901735" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.899446" elapsed="0.002335"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.899230" elapsed="0.002585"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.899213" elapsed="0.002626"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.902378" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.902012" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.902699" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.902474" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.903257" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.902940" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.902780" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.902457" elapsed="0.000883"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.903843" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.903491" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.904182" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.903936" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.904703" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.904414" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.904263" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.903919" elapsed="0.000865"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.904925" elapsed="0.000358"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:42.905724" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:42.905440" elapsed="0.000310"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.905895" elapsed="0.002322"/>
</kw>
<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="PASS" start="2026-04-26T00:08:42.896074" elapsed="0.012205"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:42.908454" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:08:42.908350" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.908332" elapsed="0.000205"/>
</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-26T00:08:42.908676" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:42.908742" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:42.910996" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494401&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494401&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.884344" elapsed="0.026684"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.911096" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.911246" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494401&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494401&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.737364" elapsed="0.173910"/>
</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-26T00:08:42.911602" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.911375" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.911358" elapsed="0.000371"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.911762" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:08:42.911913" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1494401&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1494401&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:42.733091" elapsed="0.178851"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:42.912430" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a95cb80&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:42.912115" elapsed="0.000342"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.912888" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.912606" elapsed="0.000308"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.913357" level="INFO">${id_not} = 1494401</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.913081" elapsed="0.000302"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.913832" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.913531" elapsed="0.000327"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:42.914302" level="INFO">${local_number} = 1494401</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:42.914021" elapsed="0.000306"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:42.914372" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:42.914627" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:42.914671" level="INFO">${id_not} = 1494401</msg>
<msg time="2026-04-26T00:08:42.914710" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:42.914749" level="INFO">${local_number} = 1494401</msg>
<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="PASS" start="2026-04-26T00:08:42.730912" elapsed="0.183859"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.916918" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.914930" elapsed="0.002061"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.919156" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:42.917146" elapsed="0.002065"/>
</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="PASS" start="2026-04-26T00:08:42.919361" elapsed="0.000314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.920200" level="INFO">${rate} = 4981.336666666667</msg>
<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="PASS" start="2026-04-26T00:08:42.919827" elapsed="0.000399"/>
</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="PASS" start="2026-04-26T00:08:42.920375" elapsed="0.000320"/>
</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="PASS" start="2026-04-26T00:08:42.920844" elapsed="0.000336"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.921695" level="INFO">${sum_local_number} = 16448497</msg>
<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="PASS" start="2026-04-26T00:08:42.921331" elapsed="0.000390"/>
</kw>
<var name="${index}">11</var>
<status status="PASS" start="2026-04-26T00:08:42.727378" elapsed="0.194378"/>
</iter>
<iter>
<kw name="Unsubscribe_Ynl" owner="MdsalLowlevel">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.926542" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.926250" elapsed="0.000318"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:08:42.926613" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:42.926758" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:08:42.925861" elapsed="0.000921"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.927321" level="INFO">&amp;{mapping} = { ID=working-pair-12 }</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-26T00:08:42.926937" elapsed="0.000410"/>
</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-26T00:08:42.959713" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:42.959344" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.960592" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:08:42.960298" elapsed="0.000357">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:42.960749" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:42.959948" elapsed="0.000826"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.961338" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:42.960933" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:42.961667" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:42.961799" level="INFO">${template} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:08:42.961521" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.962235" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.961992" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.963420" level="INFO">mapping: {'ID': 'working-pair-12'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:42.962940" elapsed="0.000525"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.964044" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:08:42.963619" elapsed="0.000452"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.965117" level="INFO">${value} = working-pair-12</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-26T00:08:42.964445" elapsed="0.000713"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-26T00:08:42.966954" level="INFO">${encoded} = working-pair-12</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-26T00:08:42.966467" elapsed="0.000543"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-26T00:08:42.967089" elapsed="0.000075"/>
</return>
<msg time="2026-04-26T00:08:42.967430" level="INFO">${encoded_value} = working-pair-12</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-26T00:08:42.965602" elapsed="0.001868"/>
</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-26T00:08:42.967693" elapsed="0.000532"/>
</kw>
<var name="${key}">ID</var>
<var name="${value}">working-pair-12</var>
<status status="PASS" start="2026-04-26T00:08:42.964285" elapsed="0.004042"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.964120" elapsed="0.004243"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:08:42.968406" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:42.968561" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:08:42.962628" elapsed="0.005958"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:42.962345" elapsed="0.006272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.968785" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:42.968641" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:42.962326" elapsed="0.006536"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:42.969444" level="INFO">${final_text} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.969020" elapsed="0.000450"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:42.969518" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:42.958717" elapsed="0.010921"/>
</kw>
<msg time="2026-04-26T00:08:42.969712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:42.946555" elapsed="0.023205"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.981989" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:42.993744" elapsed="0.000027"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.005517" 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-26T00:08:43.005704" elapsed="0.000045"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.005900" 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-26T00:08:43.006268" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.006129" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:43.006114" elapsed="0.000232"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.006481" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.006642" 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-26T00:08:43.006801" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:43.006087" elapsed="0.000766"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:43.005987" elapsed="0.000891"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.007031" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:43.007106" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:08:43.007214" level="INFO">${uri} = /rests/operations/odl-mdsal-lowlevel-control:unsubscribe-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-26T00:08:42.942475" elapsed="0.064764"/>
</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-26T00:08:43.030733" level="INFO">${file_path_stream} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:43.030365" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:43.031531" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/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-26T00:08:43.031251" elapsed="0.000343">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:43.031685" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:43.030915" elapsed="0.000794"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.032304" level="INFO">${file_path} = /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:43.031864" elapsed="0.000517"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:08:43.032669" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml"&gt;/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:08:43.032790" 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-26T00:08:43.032537" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.033229" 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-26T00:08:43.032982" elapsed="0.000293"/>
</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-26T00:08:43.033621" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.033340" elapsed="0.000339"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.034175" level="INFO">${mapping_to_use} = {'ID': 'working-pair-12'}</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-26T00:08:43.033861" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.033705" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.033322" elapsed="0.000937"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.034914" level="INFO">${final_text} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:43.034400" elapsed="0.000543"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:08:43.035009" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:08:43.029729" elapsed="0.005405"/>
</kw>
<msg time="2026-04-26T00:08:43.035186" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:43.017763" elapsed="0.017470"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.047184" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.058950" elapsed="0.000040"/>
</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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl.chromium/${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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.070743" 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-26T00:08:43.070928" 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-26T00:08:43.071113" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.071463" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.071326" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:08:43.071312" elapsed="0.000272"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.071730" 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-26T00:08:43.071893" 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-26T00:08:43.072069" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:08:43.071284" elapsed="0.000840"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:08:43.071186" elapsed="0.000963"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.072289" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:08:43.072363" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:43.072477" level="INFO">${data} = &lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:43.016906" elapsed="0.055598"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:08:43.073718" level="FAIL">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_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-26T00:08:43.073479" elapsed="0.000303">File '/w/workspace/controller-csit-1node-rest-cars-perf-all-chromium/test/csit/variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:08:43.073892" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:08:43.073151" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.074239" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.074002" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.074759" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:43.074471" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.074318" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.073983" elapsed="0.000858"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.077113" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:08:43.075004" elapsed="0.002135"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:08:43.077189" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:43.077339" 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-chromium/test/csit/libraries/../variables/mdsal/lowlevelrpc/unsubscribe_ynl/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:08:43.072820" elapsed="0.004544"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.078994" level="INFO">/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:43.078667" elapsed="0.000375"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.079425" level="INFO">&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&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-26T00:08:43.079190" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.079851" 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-26T00:08:43.079613" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.080289" 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-26T00:08:43.080053" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-26T00:08:43.081111" 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-26T00:08:43.080910" elapsed="0.000227"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-26T00:08:43.081452" 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-26T00:08:43.081284" elapsed="0.000193"/>
</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-26T00:08:43.081619" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.082319" 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-26T00:08:43.082038" elapsed="0.000325"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-26T00:08:43.082406" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:08:43.082559" 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-26T00:08:43.080521" elapsed="0.002063"/>
</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-26T00:08:43.090186" level="INFO">POST Request : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 path_url=/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node07hcgc3c4o9gxifdhpwq6xt3y20002.node0', 'Content-Length': '110', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;
  &lt;id&gt;working-pair-12&lt;/id&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-04-26T00:08:43.090295" level="INFO">POST Response : url=http://10.30.171.86:8181/rests/operations/odl-mdsal-lowlevel-control:unsubscribe-ynl 
 status=200, reason=OK 
 headers={'Content-Type': 'application/xml', 'Content-Length': '191'} 
 body=&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt; 
 </msg>
<msg time="2026-04-26T00:08:43.090389" level="INFO">${response} = &lt;Response [200]&gt;</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="PASS" start="2026-04-26T00:08:43.084808" elapsed="0.005607"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.082652" elapsed="0.007806"/>
</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-26T00:08:43.090632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.090484" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.082634" elapsed="0.008084"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.094395" level="INFO">&lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:43.091714" elapsed="0.002752"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.091500" elapsed="0.003016"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.091483" elapsed="0.003068"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.098126" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:08:43.094934" elapsed="0.003256"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.094628" elapsed="0.003609"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.094605" elapsed="0.003667"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.099024" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:43.098492" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.099478" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.099160" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.100244" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:43.099802" elapsed="0.000479"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.099589" elapsed="0.000740"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.099134" elapsed="0.001224"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.101088" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:43.100569" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.101533" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.101219" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.102270" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:08:43.101854" elapsed="0.000441"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.101643" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.101194" elapsed="0.001156"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:08:43.102492" elapsed="0.000337"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:08:43.103275" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:08:43.103001" elapsed="0.000299"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:08:43.103487" elapsed="0.002262"/>
</kw>
<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="PASS" start="2026-04-26T00:08:43.091072" elapsed="0.014740"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-26T00:08:43.106021" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-26T00:08:43.105899" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.105864" elapsed="0.000243"/>
</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-26T00:08:43.106253" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:08:43.106319" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:08:43.108538" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:43.077669" elapsed="0.030899"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:43.108637" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:08:43.108786" level="INFO">${response_text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<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="PASS" start="2026-04-26T00:08:42.931815" elapsed="0.176999"/>
</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-26T00:08:43.109163" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.108915" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.108898" elapsed="0.000358"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:08:43.109288" elapsed="0.000025"/>
</return>
<msg time="2026-04-26T00:08:43.109435" level="INFO">${text} = &lt;output xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control"&gt;&lt;local-number&gt;1500001&lt;/local-number&gt;&lt;all-not&gt;17948498&lt;/all-not&gt;&lt;id-not&gt;1500001&lt;/id-not&gt;&lt;err-not&gt;0&lt;/err-not&gt;&lt;/output&gt;</msg>
<var>${text}</var>
<arg>${UNSUBSCRIBE_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="PASS" start="2026-04-26T00:08:42.927590" elapsed="0.181873"/>
</kw>
<kw name="Parse Xml" owner="XML">
<msg time="2026-04-26T00:08:43.109978" level="INFO">${xml} = &lt;Element 'output' at 0x7b9e0a7c0a40&gt;</msg>
<var>${xml}</var>
<arg>${text}</arg>
<doc>Parses the given XML file or string into an element structure.</doc>
<status status="PASS" start="2026-04-26T00:08:43.109619" elapsed="0.000393"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:43.110448" level="INFO">${all_not} = 17948498</msg>
<var>${all_not}</var>
<arg>${xml}</arg>
<arg>xpath=all-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:43.110167" elapsed="0.000307"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:43.110901" level="INFO">${id_not} = 1500001</msg>
<var>${id_not}</var>
<arg>${xml}</arg>
<arg>xpath=id-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:43.110628" elapsed="0.000298"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:43.111363" level="INFO">${err_not} = 0</msg>
<var>${err_not}</var>
<arg>${xml}</arg>
<arg>xpath=err-not</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:43.111091" elapsed="0.000298"/>
</kw>
<kw name="Get Element Text" owner="XML">
<msg time="2026-04-26T00:08:43.111806" level="INFO">${local_number} = 1500001</msg>
<var>${local_number}</var>
<arg>${xml}</arg>
<arg>xpath=local-number</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="PASS" start="2026-04-26T00:08:43.111536" elapsed="0.000294"/>
</kw>
<return>
<value>${all_not}</value>
<value>${id_not}</value>
<value>${err_not}</value>
<value>${local_number}</value>
<status status="PASS" start="2026-04-26T00:08:43.111875" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:08:43.112147" level="INFO">${all_not} = 17948498</msg>
<msg time="2026-04-26T00:08:43.112191" level="INFO">${id_not} = 1500001</msg>
<msg time="2026-04-26T00:08:43.112230" level="INFO">${err_not} = 0</msg>
<msg time="2026-04-26T00:08:43.112270" level="INFO">${local_number} = 1500001</msg>
<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="PASS" start="2026-04-26T00:08:42.925375" elapsed="0.186917"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.115333" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${err_not}</arg>
<arg>${0}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:43.112451" elapsed="0.002977"/>
</kw>
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.117409" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${local_number}</arg>
<arg>${0}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:08:43.115580" elapsed="0.001883"/>
</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="PASS" start="2026-04-26T00:08:43.117614" elapsed="0.000365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.118495" level="INFO">${rate} = 5000.003333333333</msg>
<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="PASS" start="2026-04-26T00:08:43.118135" elapsed="0.000386"/>
</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="PASS" start="2026-04-26T00:08:43.118670" elapsed="0.000340"/>
</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="PASS" start="2026-04-26T00:08:43.119165" elapsed="0.000320"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.120001" level="INFO">${sum_local_number} = 17948498</msg>
<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="PASS" start="2026-04-26T00:08:43.119636" elapsed="0.000392"/>
</kw>
<var name="${index}">12</var>
<status status="PASS" start="2026-04-26T00:08:42.921879" elapsed="0.198185"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${count}+1</value>
<status status="PASS" start="2026-04-26T00:08:40.743057" elapsed="2.377038"/>
</for>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.120603" level="INFO">${final_rate} = 59828.32666666667</msg>
<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="PASS" start="2026-04-26T00:08:43.120249" elapsed="0.000380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.121117" level="INFO">${low_limit_final_rate} = 54000.0</msg>
<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="PASS" start="2026-04-26T00:08:43.120778" elapsed="0.000365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.121613" level="INFO">${high_limit_final_rate} = 66000.0</msg>
<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="PASS" start="2026-04-26T00:08:43.121292" elapsed="0.000347"/>
</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="PASS" start="2026-04-26T00:08:43.121784" elapsed="0.000347"/>
</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="PASS" start="2026-04-26T00:08:43.122279" elapsed="0.000320"/>
</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="PASS" start="2026-04-25T23:58:30.902817" elapsed="612.219843"/>
</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-26T00:08:43.123886" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:08:43.123512" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.123494" elapsed="0.000494"/>
</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-26T00:08:43.124131" elapsed="0.000305"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:08:43.129215" 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-26T00:08:43.128808" elapsed="0.000434"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-26T00:08:43.129454" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:08:43.129314" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-26T00:08:43.129296" elapsed="0.000236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.129675" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<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="NOT RUN" start="2026-04-26T00:08:43.129837" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.130031" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-26T00:08:43.130193" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<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="NOT RUN" start="2026-04-26T00:08:43.130350" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.130509" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-26T00:08:43.130708" elapsed="0.000021"/>
</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-26T00:08:43.128512" elapsed="0.002275"/>
</kw>
<status status="PASS" start="2026-04-26T00:08:43.123308" elapsed="0.007529"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-26T00:08:43.122934" elapsed="0.007943"/>
</kw>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:58:30.802490" elapsed="612.328424"/>
</test>
<kw name="Close All Connections" owner="SSHLibrary" type="TEARDOWN">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-26T00:08:43.131779" elapsed="0.000272"/>
</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="PASS" start="2026-04-25T23:38:23.955338" elapsed="1819.176750"/>
</suite>
<status status="PASS" start="2026-04-25T23:37:00.184655" elapsed="1902.948609"/>
</suite>
<statistics>
<total>
<stat pass="12" fail="0" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="3" fail="0" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-rest-cars-perf.txt" id="s1" pass="12" fail="0" skip="0">controller-rest-cars-perf.txt</stat>
<stat name="010 Crud Mdsal Perf" id="s1-s1" pass="9" fail="0" skip="0">controller-rest-cars-perf.txt.010 Crud Mdsal Perf</stat>
<stat name="Noloss Rate 1Node" id="s1-s2" pass="3" fail="0" skip="0">controller-rest-cars-perf.txt.Noloss Rate 1Node</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
