<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-29T03:01:51.600290" rpa="false" schemaversion="5">
<suite id="s1" name="jsonrpc-basic.txt" source="/w/workspace/jsonrpc-csit-1node-basic-only-vanadium/test/csit/suites/jsonrpc/010-mdsal-jsonrpc-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.198882" 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-29T03:01:52.195298" elapsed="0.003630"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-29T03:01:52.199212" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:52.199087" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.199052" elapsed="0.000239"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.199796" 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-29T03:01:52.199449" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.200383" 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-29T03:01:52.200036" elapsed="0.000377"/>
</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-29T03:01:52.201022" elapsed="0.000302"/>
</kw>
<msg time="2026-04-29T03:01:52.201437" level="INFO">${status} = PASS</msg>
<msg time="2026-04-29T03:01:52.201489" 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-29T03:01:52.200596" elapsed="0.000919"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.202096" 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-29T03:01:52.201687" elapsed="0.000437"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.203153" 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-29T03:01:52.202853" elapsed="0.000329"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.203601" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-29T03:01:52.203328" elapsed="0.000302"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.204144" 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-29T03:01:52.203783" elapsed="0.000390"/>
</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-29T03:01:52.207299" elapsed="0.000237"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.208028" level="INFO">${member_ip} = 10.30.171.175</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-29T03:01:52.207683" elapsed="0.000373"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-29T03:01:52.208196" elapsed="0.000303"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.209297" 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-29T03:01:52.208998" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-29T03:01:52.209371" elapsed="0.000041"/>
</return>
<msg time="2026-04-29T03:01:52.209542" 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-29T03:01:52.208688" elapsed="0.000879"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-29T03:01:52.210240" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.175:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7af8de758750&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-29T03:01:52.209779" elapsed="0.000622"/>
</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-29T03:01:52.210555" elapsed="0.000203"/>
</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-29T03:01:52.206625" elapsed="0.004193"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-29T03:01:52.206442" elapsed="0.004420"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-29T03:01:52.204237" elapsed="0.006659"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.211434" 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-29T03:01:52.211068" elapsed="0.000410"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.212005" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.175'}</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-29T03:01:52.211628" elapsed="0.000422"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.212613" 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-29T03:01:52.212248" elapsed="0.000409"/>
</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-29T03:01:52.202377" elapsed="0.010340"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-29T03:01:52.194566" elapsed="0.018211"/>
</kw>
<test id="s1-t1" name="Push MDSAL data and Verify Through Restconf" line="14">
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.214970" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-29T03:01:52.214619" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-29T03:01:52.215192" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-29T03:01:52.215085" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.215064" elapsed="0.000218"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:52.215429" elapsed="0.000022"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:52.215594" elapsed="0.000021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:52.215759" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:52.215926" elapsed="0.000035"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:52.216186" elapsed="0.000024"/>
</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-29T03:01:52.214118" elapsed="0.002157"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-29T03:01:52.216490" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:52.216374" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.216353" elapsed="0.000205"/>
</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-29T03:01:52.220303" 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-29T03:01:52.219882" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.220777" 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-29T03:01:52.220478" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-29T03:01:52.220849" elapsed="0.000031"/>
</return>
<msg time="2026-04-29T03:01:52.221032" 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-29T03:01:52.219503" elapsed="0.001554"/>
</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-29T03:01:52.222089" level="INFO">${member_ip} = 10.30.171.175</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-29T03:01:52.221798" elapsed="0.000318"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.222982" 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-29T03:01:52.223093" 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-29T03:01:52.222780" elapsed="0.000340"/>
</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-29T03:01:52.226181" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-29T03:01:52.225570" elapsed="0.000672"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.225549" elapsed="0.000724"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.226548" 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-29T03:01:52.226717" 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-29T03:01:52.226410" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.227297" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.175" 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-29T03:01:52.226887" elapsed="0.000458"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.227873" 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-29T03:01:52.227492" elapsed="0.000408"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.229445" level="INFO">Length is 0.</msg>
<msg time="2026-04-29T03:01:52.229532" 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-29T03:01:52.228668" elapsed="0.000890"/>
</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-29T03:01:52.229708" elapsed="0.000632"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.231760" level="INFO">Logging into '10.30.171.175:22' as 'jenkins'.</msg>
<msg time="2026-04-29T03:01:52.679800" 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 Wed Apr 29 03:01:50 UTC 2026

  System load:  0.36               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.175
  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-60024-213-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-29T03:01:52.231160" elapsed="0.448810"/>
</kw>
<msg time="2026-04-29T03:01:52.680144" 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-29T03:01:52.230500" elapsed="0.449755"/>
</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-29T03:01:52.228119" elapsed="0.452252"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.680825" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-29T03:01:52.713852" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-29T03:01:52.713999" level="INFO">${stdout} = </msg>
<msg time="2026-04-29T03:01:52.714068" 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-29T03:01:52.680583" elapsed="0.033511"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-29T03:01:52.714254" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.715014" 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-29T03:01:52.714700" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-29T03:01:52.715331" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:52.715170" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.715137" elapsed="0.000275"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-29T03:01:52.715578" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-29T03:01:52.715469" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.715453" elapsed="0.000214"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-29T03:01:52.715704" elapsed="0.000015"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-29T03:01:52.718598" elapsed="0.000730"/>
</kw>
<kw name="Open 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-29T03:01:52.719678" elapsed="0.000434"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-29T03:01:52.720421" elapsed="0.000222"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-29T03:01:52.716045" elapsed="0.004721"/>
</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-29T03:01:52.225034" elapsed="0.495977"/>
</kw>
<msg time="2026-04-29T03:01:52.721252" 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-29T03:01:52.224400" elapsed="0.496980"/>
</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-29T03:01:52.223743" elapsed="0.497818"/>
</kw>
<msg time="2026-04-29T03:01:52.721656" 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-29T03:01:52.223263" elapsed="0.498499"/>
</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-29T03:01:52.725015" elapsed="0.000314"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-29T03:01:52.725480" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-29T03:01:52.725767" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-29T03:01:52.722520" elapsed="0.003433"/>
</kw>
<msg time="2026-04-29T03:01:52.726051" 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-29T03:01:52.222319" elapsed="0.503756"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.726490" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:52.726241" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-29T03:01:52.726573" elapsed="0.000033"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-29T03:01:52.221411" elapsed="0.505290"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-29T03:01:52.221248" elapsed="0.505490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-29T03:01:52.221113" elapsed="0.505665"/>
</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-29T03:01:52.216777" elapsed="0.510060"/>
</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-29T03:01:52.726999" elapsed="0.000215"/>
</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-29T03:01:52.739890" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:52.739779" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.739759" elapsed="0.000216"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.740264" 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-29T03:01:52.740369" 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-29T03:01:52.740121" elapsed="0.000274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.740788" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:52.740533" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:52.741230" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:52.740988" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-29T03:01:52.742030" 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-29T03:01:52.741770" elapsed="0.000462">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-29T03:01:52.742347" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-29T03:01:52.742394" 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-29T03:01:52.741416" elapsed="0.001000"/>
</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-29T03:01:52.742714" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-29T03:01:52.742498" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:52.742476" elapsed="0.000339"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-29T03:01:52.743597" level="INFO">${ip_address} = 10.30.171.175</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-29T03:01:52.743325" elapsed="0.000298"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-29T03:01:52.743670" elapsed="0.000029"/>
</return>
<msg time="2026-04-29T03:01:52.743818" level="INFO">${odl_ip} = 10.30.171.175</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-29T03:01:52.743020" elapsed="0.000860"/>
</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-29T03:01:52.744040" elapsed="0.000435"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.744749" level="INFO">index=4
host=10.30.171.175
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-29T03:01:52.744853" level="INFO">${karaf_connection_object} = index=4
host=10.30.171.175
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-29T03:01:52.744633" elapsed="0.000247"/>
</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-29T03:01:52.745032" elapsed="0.002290"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-29T03:01:52.747740" level="INFO">Logging into '10.30.171.175:8101' as 'karaf'.</msg>
<msg time="2026-04-29T03:01:53.478798" 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-29T03:01:52.747473" elapsed="0.731508"/>
</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-29T03:01:53.482453" elapsed="0.000313"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-29T03:01:53.482919" elapsed="0.000205"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-29T03:01:53.483263" elapsed="0.000105"/>
</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-29T03:01:53.480179" elapsed="0.003242"/>
</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-29T03:01:53.479423" elapsed="0.004044"/>
</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-29T03:01:52.739455" elapsed="0.744065"/>
</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-29T03:01:52.727929" elapsed="0.755638"/>
</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-29T03:01:52.727564" elapsed="0.756054"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-29T03:01:52.727434" elapsed="0.756224"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-29T03:01:52.727276" elapsed="0.756426"/>
</for>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-29T03:01:52.213640" elapsed="1.270131"/>
</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-29T03:01:53.485961" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:53.485818" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:53.485792" elapsed="0.000245"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-29T03:01:53.486406" 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-29T03:01:53.486171" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-29T03:01:53.486747" 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-29T03:01:53.486574" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-29T03:01:53.559530" level="INFO">@root&gt;log:set DEBUG org.opendaylight.jsonrpc</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-29T03:01:53.487265" elapsed="0.072359"/>
</kw>
<msg time="2026-04-29T03:01:53.559786" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-29T03:01:53.559853" level="INFO">${message_write} = @root&gt;log:set DEBUG org.opendaylight.jsonrpc
</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-29T03:01:53.486916" elapsed="0.072972"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-29T03:01:53.562329" 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-29T03:01:53.560771" elapsed="0.001614"/>
</kw>
<msg time="2026-04-29T03:01:53.562483" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-29T03:01:53.562525" 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-29T03:01:53.560239" elapsed="0.002312"/>
</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-29T03:01:53.562836" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-29T03:01:53.562625" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:53.562607" elapsed="0.000307"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.563322" 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-29T03:01:53.563066" elapsed="0.000309"/>
</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-29T03:01:53.563642" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-29T03:01:53.563441" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-04-29T03:01:53.563424" elapsed="0.000294"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-29T03:01:53.563750" 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">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-29T03:01:53.564860" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-29T03:01:53.565335" elapsed="0.000338"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-29T03:01:53.565811" elapsed="0.000101"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-29T03:01:53.564518" elapsed="0.001467"/>
</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-29T03:01:53.564015" elapsed="0.002018"/>
</kw>
<arg>log:set DEBUG org.opendaylight.jsonrpc</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-29T03:01:53.484156" elapsed="0.081977"/>
</kw>
<kw name="Mount Read Service Endpoint" owner="JsonrpcKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-29T03:01:53.566874" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/jsonrpc-csit-1node-basic-only-vanadium/test/csit/variables/jsonrpc/readservice_peer_payload.json"&gt;/w/workspace/jsonrpc-csit-1node-basic-only-vanadium/test/csit/variables/jsonrpc/readservice_peer_payload.json&lt;/a&gt;'.</msg>
<msg time="2026-04-29T03:01:53.567063" level="INFO">${JSON1} = {
    "configured-endpoints": [
        {
            "name": "foo",
            "modules": [
                "jsonrpc"
            ],
            "data-config-endpoints": [
                {
        ...</msg>
<var>${JSON1}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-29T03:01:53.566723" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.567490" level="INFO">{
    "configured-endpoints": [
        {
            "name": "foo",
            "modules": [
                "jsonrpc"
            ],
            "data-config-endpoints": [
                {
                    "path": "{}",
                    "endpoint-uri": "zmq://127.0.0.1:4444"
                }
            ],
            "data-operational-endpoints": [
                {
                    "path": "{}",
                    "endpoint-uri": "zmq://127.0.0.1:4444"
                }
            ]
        }
    ]
}
</msg>
<arg>${JSON1}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.567245" elapsed="0.000294"/>
</kw>
<kw name="Put_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.572608" 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-29T03:01:53.572291" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-29T03:01:53.572679" elapsed="0.000030"/>
</return>
<msg time="2026-04-29T03:01:53.572826" 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-29T03:01:53.571962" elapsed="0.000888"/>
</kw>
<kw name="Put_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.578017" level="INFO">/rests/data/jsonrpc:config/configured-endpoints=foo</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.577751" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.578438" level="INFO">{
    "configured-endpoints": [
        {
            "name": "foo",
            "modules": [
                "jsonrpc"
            ],
            "data-config-endpoints": [
                {
                    "path": "{}",
                    "endpoint-uri": "zmq://127.0.0.1:4444"
                }
            ],
            "data-operational-endpoints": [
                {
                    "path": "{}",
                    "endpoint-uri": "zmq://127.0.0.1:4444"
                }
            ]
        }
    ]
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.578201" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.578861" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.578620" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.579331" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.579091" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-29T03:01:53.580177" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-29T03:01:53.579964" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-29T03:01:53.580528" level="INFO">${items_to_add} = []</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-29T03:01:53.580353" 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-29T03:01:53.580689" elapsed="0.000208"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-29T03:01:53.581307" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-29T03:01:53.581062" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-29T03:01:53.581392" elapsed="0.000031"/>
</return>
<msg time="2026-04-29T03:01:53.581548" level="INFO">${headers} = {'Content-Type': 'application/json'}</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-29T03:01:53.579562" 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="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-29T03:01:58.592314" level="FAIL">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-29T03:01:53.583686" elapsed="5.018281">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<status status="FAIL" start="2026-04-29T03:01:53.581644" elapsed="5.020485">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</branch>
<branch type="ELSE">
<kw name="PUT 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 PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:58.602493" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-29T03:01:58.602188" elapsed="0.000416"/>
</branch>
<status status="FAIL" start="2026-04-29T03:01:53.581625" elapsed="5.021015">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:58.603293" elapsed="0.000042"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-29T03:01:58.603501" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-29T03:01:58.603443" elapsed="0.000124"/>
</branch>
<status status="NOT RUN" start="2026-04-29T03:01:58.603417" elapsed="0.000182"/>
</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-29T03:01:58.603796" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-29T03:01:58.603901" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>PUT data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-29T03:01:53.575375" elapsed="5.028722">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-29T03:01:58.604205" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Put_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.</doc>
<status status="FAIL" start="2026-04-29T03:01:53.573069" elapsed="5.031282">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-29T03:01:58.604439" elapsed="0.000022"/>
</return>
<var>${response_json}</var>
<arg>${READ_SERVICE_PEER_URL}=${endpoint}</arg>
<arg>${JSON1}</arg>
<arg>${controller_index}</arg>
<doc>Send a PUT with the supplied uri and data to member ${member_index}.</doc>
<status status="FAIL" start="2026-04-29T03:01:53.571425" elapsed="5.033153">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-29T03:01:58.604842" elapsed="0.000032"/>
</kw>
<doc>This keyword mounts an endpoint after starting service</doc>
<status status="FAIL" start="2026-04-29T03:01:53.566335" elapsed="5.038693">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<kw name="Run Read Service Python Script on Controller Vm" owner="JsonrpcKeywords">
<doc>This keyword creates a new virtual environment, installs pyzmq &amp; zmq and starts the read service on controller vm</doc>
<status status="NOT RUN" start="2026-04-29T03:01:58.605497" elapsed="0.000036"/>
</kw>
<kw name="Verify Data On Mounted Endpoint" owner="JsonrpcKeywords">
<doc>This keyword verifies if the data we get on the mount point is same as what we put</doc>
<status status="NOT RUN" start="2026-04-29T03:01:58.605813" elapsed="0.000033"/>
</kw>
<doc>Push data using python utility and verify using restconf</doc>
<tag>basic data</tag>
<status status="FAIL" start="2026-04-29T03:01:52.212840" elapsed="6.393247">ReadTimeout: HTTPConnectionPool(host='10.30.171.175', port=8181): Read timed out. (read timeout=5.0)</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-29T03:01:58.608395" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-29T03:01:58.608030" elapsed="0.000749"/>
</kw>
<doc>Test suite for verifying basic variations of export API including checking statuses</doc>
<status status="FAIL" start="2026-04-29T03:01:51.602171" elapsed="7.006711"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="1" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="1" skip="0">basic data</stat>
</tag>
<suite>
<stat name="jsonrpc-basic.txt" id="s1" pass="0" fail="1" skip="0">jsonrpc-basic.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
